// 文档 https://github.com/hooke007/MPV_lazy/wiki/4_GLSL

// CuNNy 4x24 DS (dp4a)
// Copyright (c) 2024 funnyplanter

// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 3.0 of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this program.  If not, see <https://www.gnu.org/licenses/>.
/* ------------------------------------------------------------------- */


//!DESC [CuNNy_4x24_DS_vk] -in
//!HOOK LUMA
//!COMPUTE 24 16 8 8
//!BIND LUMA
//!SAVE in
//!WIDTH LUMA.w 3 *
//!HEIGHT LUMA.h 2 *
//!COMPONENTS 4
//!WHEN OUTPUT.w LUMA.w 1.200 * > OUTPUT.h LUMA.h 1.200 * > *
#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable
#ifdef GL_EXT_shader_explicit_arithmetic_types_float16
#	define V4 f16vec4
#	define M4 f16mat4
#	define F float16_t
#else
#	define V4 vec4
#	define M4 mat4
#	define F float
#endif
#define l0(x, y) F((LUMA_mul * texelFetch(LUMA_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(1, 1) + ivec2(0, 0), 0)).r)
shared F G[1][10][10];
void hook() {
	ivec2 xy = ivec2(gl_LocalInvocationID.xy);
	ivec2 pos = ivec2(gl_WorkGroupID.xy) * ivec2(8, 8) + xy;
	ivec2 opos = pos * ivec2(3, 2);
	ivec2 sz = ivec2(LUMA_size) - ivec2(1);
	for (int y = 0; y < 10; y += 8) {
		int ay = xy.y + y;
		if (ay >= 10) break;
		for (int x = 0; x < 10; x += 8) {
			int ax = xy.x + x;
			if (ax >= 10) break;
			G[0][ay][ax] = l0(x - 1, y - 1);
		}
	}
	barrier();
	F s0_0_0, s0_0_1, s0_0_2, s0_1_0, s0_1_1, s0_1_2, s0_2_0, s0_2_1, s0_2_2;
	V4 r0, r1, r2, r3, r4, r5;
	r0 = V4(0.0); r1 = V4(0.0); r2 = V4(0.0); r3 = V4(0.0); r4 = V4(0.0); r5 = V4(0.0);
	s0_0_0 = G[0][xy.y+0][xy.x+0]; s0_0_1 = G[0][xy.y+0][xy.x+1];
	s0_0_2 = G[0][xy.y+0][xy.x+2]; s0_1_0 = G[0][xy.y+1][xy.x+0];
	s0_1_1 = G[0][xy.y+1][xy.x+1]; s0_1_2 = G[0][xy.y+1][xy.x+2];
	s0_2_0 = G[0][xy.y+2][xy.x+0]; s0_2_1 = G[0][xy.y+2][xy.x+1];
	s0_2_2 = G[0][xy.y+2][xy.x+2];
	r0 += V4(1.800e-02, -9.556e-04, 4.619e-04, 3.781e-02) * s0_0_0;
	r1 += V4(-5.641e-02, -5.539e-02, -2.122e-02, -3.967e-01) * s0_0_0;
	r2 += V4(-9.497e-02, -4.838e-01, -4.203e-01, -5.976e-01) * s0_0_0;
	r3 += V4(5.872e-02, 1.057e-01, 4.177e-02, 1.080e-01) * s0_0_0;
	r4 += V4(-3.641e-04, 1.598e-02, 1.859e-02, -5.774e-02) * s0_0_0;
	r5 += V4(1.285e-03, -2.192e-03, -1.070e-02, 4.598e-02) * s0_0_0;
	r0 += V4(9.665e-03, 3.110e-03, -1.707e-02, -1.043e-02) * s0_0_1;
	r1 += V4(6.514e-02, 2.236e-01, 3.884e-01, 6.087e-01) * s0_0_1;
	r2 += V4(-1.181e-01, -2.069e-02, -4.929e-02, -3.162e-02) * s0_0_1;
	r3 += V4(6.519e-01, 6.777e-01, 4.144e-01, 7.045e-01) * s0_0_1;
	r4 += V4(-1.880e-01, -3.761e-02, -3.920e-02, 1.398e-02) * s0_0_1;
	r5 += V4(6.653e-03, -4.814e-03, -2.340e-02, -2.085e-02) * s0_0_1;
	r0 += V4(5.163e-02, -3.595e-03, 1.934e-02, -3.472e-02) * s0_0_2;
	r1 += V4(-1.657e-02, -1.473e-01, -4.358e-02, -2.085e-01) * s0_0_2;
	r2 += V4(-4.548e-02, 5.526e-02, 1.415e-03, -5.515e-03) * s0_0_2;
	r3 += V4(7.526e-02, 7.398e-02, 3.484e-02, 7.062e-02) * s0_0_2;
	r4 += V4(2.408e-02, 1.752e-02, 6.944e-03, 4.033e-02) * s0_0_2;
	r5 += V4(-4.888e-03, 8.054e-03, 3.470e-02, -6.227e-04) * s0_0_2;
	r0 += V4(2.400e-02, -1.832e-03, 1.201e-02, 3.403e-01) * s0_1_0;
	r1 += V4(6.092e-02, -1.685e-01, 1.263e-02, 3.409e-01) * s0_1_0;
	r2 += V4(-1.368e-01, -5.799e-02, -1.519e-01, -5.007e-03) * s0_1_0;
	r3 += V4(-5.839e-02, -7.105e-02, -2.902e-02, -5.847e-02) * s0_1_0;
	r4 += V4(-1.224e-02, -3.887e-02, -4.216e-02, -3.699e-01) * s0_1_0;
	r5 += V4(2.226e-02, 7.366e-01, 5.063e-01, 6.279e-01) * s0_1_0;
	r0 += V4(3.140e-02, -1.952e-02, -1.900e-01, -6.288e-02) * s0_1_1;
	r1 += V4(4.419e-01, 2.968e-01, 2.714e-01, -3.957e-01) * s0_1_1;
	r2 += V4(7.313e-01, 3.738e-01, 3.643e-01, 6.224e-01) * s0_1_1;
	r3 += V4(-6.511e-01, -2.398e-01, -4.209e-01, -2.303e-01) * s0_1_1;
	r4 += V4(-2.640e-01, -7.598e-01, -6.660e-01, -1.082e-01) * s0_1_1;
	r5 += V4(-2.582e-01, -7.207e-01, -5.371e-01, 8.053e-02) * s0_1_1;
	r0 += V4(7.761e-02, -6.399e-01, -2.528e-01, -4.345e-01) * s0_1_2;
	r1 += V4(-4.503e-01, -1.606e-01, -3.750e-01, 1.019e-01) * s0_1_2;
	r2 += V4(5.146e-02, 8.485e-02, -4.831e-02, 1.850e-02) * s0_1_2;
	r3 += V4(-6.894e-02, -5.580e-02, -5.642e-02, -6.322e-02) * s0_1_2;
	r4 += V4(4.269e-01, 7.967e-01, 7.380e-01, 5.333e-01) * s0_1_2;
	r5 += V4(2.952e-02, -2.101e-02, 4.166e-02, 1.130e-02) * s0_1_2;
	r0 += V4(3.282e-02, 2.965e-03, -9.623e-03, 1.610e-01) * s0_2_0;
	r1 += V4(-3.576e-02, -1.296e-01, 4.789e-03, -2.903e-02) * s0_2_0;
	r2 += V4(-1.863e-01, 1.980e-02, 3.746e-02, 1.466e-03) * s0_2_0;
	r3 += V4(3.162e-03, -2.554e-02, -6.777e-03, -4.885e-02) * s0_2_0;
	r4 += V4(2.804e-02, 7.517e-03, 1.873e-02, -1.501e-01) * s0_2_0;
	r5 += V4(-9.334e-03, 2.145e-02, -5.449e-01, 7.580e-02) * s0_2_0;
	r0 += V4(4.791e-02, 6.581e-01, 3.753e-01, 2.115e-01) * s0_2_1;
	r1 += V4(5.333e-02, 1.090e-01, -7.342e-02, 3.909e-02) * s0_2_1;
	r2 += V4(-9.893e-02, 7.774e-02, -9.740e-02, 9.212e-03) * s0_2_1;
	r3 += V4(-3.469e-05, -4.602e-01, 4.209e-03, -4.630e-01) * s0_2_1;
	r4 += V4(3.967e-02, -5.522e-02, -2.564e-02, -5.826e-02) * s0_2_1;
	r5 += V4(2.501e-02, -2.694e-02, 6.014e-01, -2.860e-02) * s0_2_1;
	r0 += V4(-4.004e+00, 4.233e-03, -1.208e-01, -2.084e-01) * s0_2_2;
	r1 += V4(-2.270e-02, 8.051e-03, -1.636e-01, -2.731e-02) * s0_2_2;
	r2 += V4(-9.351e-02, -5.327e-02, 3.702e-02, -1.113e-02) * s0_2_2;
	r3 += V4(-6.967e-03, -1.030e-02, 1.959e-02, -1.670e-02) * s0_2_2;
	r4 += V4(-2.470e-02, 5.183e-02, -4.114e-03, 1.549e-01) * s0_2_2;
	r5 += V4(-1.383e-02, 6.880e-03, -7.173e-02, 6.890e-03) * s0_2_2;
	r0 += V4(4.657e-02, 8.881e-05, -6.267e-03, 1.333e-02);
	r0 = clamp(r0, V4(0.0), V4(1.0));
	imageStore(out_image, opos + ivec2(0, 0), vec4(r0));
	r1 += V4(1.722e-02, 2.403e-03, 3.720e-03, -3.403e-02);
	r1 = clamp(r1, V4(0.0), V4(1.0));
	imageStore(out_image, opos + ivec2(1, 0), vec4(r1));
	r2 += V4(1.900e-02, -1.762e-02, 2.392e-03, 4.353e-03);
	r2 = clamp(r2, V4(0.0), V4(1.0));
	imageStore(out_image, opos + ivec2(2, 0), vec4(r2));
	r3 += V4(3.989e-03, -1.402e-02, 3.308e-02, 1.365e-02);
	r3 = clamp(r3, V4(0.0), V4(1.0));
	imageStore(out_image, opos + ivec2(0, 1), vec4(r3));
	r4 += V4(1.663e-02, -1.403e-02, 6.873e-03, 1.438e-02);
	r4 = clamp(r4, V4(0.0), V4(1.0));
	imageStore(out_image, opos + ivec2(1, 1), vec4(r4));
	r5 += V4(1.111e-01, 2.506e-03, -4.079e-03, -6.913e-01);
	r5 = clamp(r5, V4(0.0), V4(1.0));
	imageStore(out_image, opos + ivec2(2, 1), vec4(r5));
}

//!DESC [CuNNy_4x24_DS_vk] -conv1
//!HOOK LUMA
//!COMPUTE 24 16 8 8
//!BIND in
//!BIND LUMA
//!SAVE conv1
//!WIDTH LUMA.w 3 *
//!HEIGHT LUMA.h 2 *
//!COMPONENTS 4
//!WHEN OUTPUT.w LUMA.w 1.200 * > OUTPUT.h LUMA.h 1.200 * > *
#extension GL_EXT_spirv_intrinsics : require
#define l0(x, y) (in_mul * texelFetch(in_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(0, 0), 0))
#define l1(x, y) (in_mul * texelFetch(in_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(1, 0), 0))
#define l2(x, y) (in_mul * texelFetch(in_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(2, 0), 0))
#define l3(x, y) (in_mul * texelFetch(in_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(0, 1), 0))
#define l4(x, y) (in_mul * texelFetch(in_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(1, 1), 0))
#define l5(x, y) (in_mul * texelFetch(in_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(2, 1), 0))
spirv_instruction (extensions = ["SPV_KHR_integer_dot_product"], capabilities = [6019, 6018], id = 4450)
int dp4(int a, int b, spirv_literal int fmt);
#define D(r, s, a, b, c, d) r + ivec4(dp4(s, a, 0), dp4(s, b, 0), dp4(s, c, 0), dp4(s, d, 0))
shared int G[6][10][10];
void hook() {
	ivec2 xy = ivec2(gl_LocalInvocationID.xy);
	ivec2 pos = ivec2(gl_WorkGroupID.xy) * ivec2(8, 8) + xy;
	ivec2 opos = pos * ivec2(3, 2);
	ivec2 sz = ivec2(LUMA_size) - ivec2(1);
	for (int y = 0; y < 10; y += 8) {
		int ay = xy.y + y;
		if (ay >= 10) break;
		for (int x = 0; x < 10; x += 8) {
			int ax = xy.x + x;
			if (ax >= 10) break;
			vec4 v0 = l0(x - 1, y - 1) * 1.0000000e+00;
			vec4 v1 = l1(x - 1, y - 1) * 1.0000000e+00;
			vec4 v2 = l2(x - 1, y - 1) * 1.0000000e+00;
			vec4 v3 = l3(x - 1, y - 1) * 1.0000000e+00;
			vec4 v4 = l4(x - 1, y - 1) * 1.0000000e+00;
			vec4 v5 = l5(x - 1, y - 1) * 1.0000000e+00;
			G[0][ay][ax] = int(packSnorm4x8(v0));
			G[1][ay][ax] = int(packSnorm4x8(v1));
			G[2][ay][ax] = int(packSnorm4x8(v2));
			G[3][ay][ax] = int(packSnorm4x8(v3));
			G[4][ay][ax] = int(packSnorm4x8(v4));
			G[5][ay][ax] = int(packSnorm4x8(v5));
		}
	}
	barrier();
	int s0_0_0, s0_0_1, s0_0_2, s0_1_0, s0_1_1, s0_1_2, s0_2_0, s0_2_1, s0_2_2, s1_0_0, s1_0_1, s1_0_2, s1_1_0, s1_1_1, s1_1_2, s1_2_0, s1_2_1, s1_2_2;
	ivec4 r0, r1, r2, r3, r4, r5;
	vec4 f0, f1, f2, f3, f4, f5;
	r0 = ivec4(0); r1 = ivec4(0); r2 = ivec4(0); r3 = ivec4(0); r4 = ivec4(0); r5 = ivec4(0);
	s0_0_0 = G[0][xy.y+0][xy.x+0]; s0_0_1 = G[0][xy.y+0][xy.x+1];
	s0_0_2 = G[0][xy.y+0][xy.x+2]; s0_1_0 = G[0][xy.y+1][xy.x+0];
	s0_1_1 = G[0][xy.y+1][xy.x+1]; s0_1_2 = G[0][xy.y+1][xy.x+2];
	s0_2_0 = G[0][xy.y+2][xy.x+0]; s0_2_1 = G[0][xy.y+2][xy.x+1];
	s0_2_2 = G[0][xy.y+2][xy.x+2]; s1_0_0 = G[1][xy.y+0][xy.x+0];
	s1_0_1 = G[1][xy.y+0][xy.x+1]; s1_0_2 = G[1][xy.y+0][xy.x+2];
	s1_1_0 = G[1][xy.y+1][xy.x+0]; s1_1_1 = G[1][xy.y+1][xy.x+1];
	s1_1_2 = G[1][xy.y+1][xy.x+2]; s1_2_0 = G[1][xy.y+2][xy.x+0];
	s1_2_1 = G[1][xy.y+2][xy.x+1]; s1_2_2 = G[1][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0xFDE135FA, 0x1B05F219, 0x11070D28, 0xF4CB3981);
	r1 = D(r1, s0_0_0, 0x08AAA683, 0xF5EDF42F, 0xDF8181E1, 0xF114F981);
	r2 = D(r2, s0_0_0, 0x11F90320, 0xE55EDFCC, 0xEA07F8E7, 0x02E3FC42);
	r3 = D(r3, s0_0_0, 0x1004EC0F, 0xEBC181A5, 0xEAFD0AC2, 0x010A0207);
	r4 = D(r4, s0_0_0, 0x02346126, 0xFE372B1A, 0x0206FE04, 0xFB14CA5C);
	r5 = D(r5, s0_0_0, 0xE919FC2A, 0xED1FFE7F, 0xE3239732, 0x00FEF610);
	r0 = D(r0, s0_0_1, 0x0CDFE3B7, 0xBD0B26E8, 0x19C30CED, 0x1E06F04D);
	r1 = D(r1, s0_0_1, 0xFD81DF4E, 0x0F16ECEE, 0xDA3D8129, 0xCA1002D8);
	r2 = D(r2, s0_0_1, 0x0502DE01, 0xEC7F81C1, 0x010717F0, 0xF1FCF323);
	r3 = D(r3, s0_0_1, 0xFD0BFAFB, 0xE9051209, 0x1104F400, 0xFDF204FA);
	r4 = D(r4, s0_0_1, 0x10D6E7FA, 0xDDF1F8EE, 0x010CE2E6, 0xF0FC4538);
	r5 = D(r5, s0_0_1, 0xE9D3192A, 0x048181EE, 0x0AE17E15, 0x0201F90F);
	r0 = D(r0, s0_0_2, 0x000E0E0A, 0x011026FF, 0xE705DAFA, 0xF8FA190A);
	r1 = D(r1, s0_0_2, 0x21D50713, 0xFD05FC01, 0x0F38E7FC, 0x3FEAFAF6);
	r2 = D(r2, s0_0_2, 0xF7F7FCFC, 0x81221E2C, 0x0B030402, 0x3401E3FF);
	r3 = D(r3, s0_0_2, 0x04FDFF03, 0xB6FC1DF9, 0x12FA0C06, 0x0208F9FA);
	r4 = D(r4, s0_0_2, 0xED17150D, 0x01DA1304, 0x13DD1BF1, 0xFA1AD4E0);
	r5 = D(r5, s0_0_2, 0xC30A0A04, 0x04EBE611, 0x5BF6C7FA, 0x07FF06FE);
	r0 = D(r0, s0_1_0, 0xD3100CD6, 0xF40AF601, 0xE2E0221F, 0xC2123D7F);
	r1 = D(r1, s0_1_0, 0x15DD07D0, 0xF04481FE, 0xF87FAAB5, 0xB1D33E01);
	r2 = D(r2, s0_1_0, 0x0001210E, 0x6EC4DBF3, 0x0A07F2C4, 0x0208F781);
	r3 = D(r3, s0_1_0, 0x0BEFF00F, 0x08FF0835, 0x06CEDBE3, 0xC7173A06);
	r4 = D(r4, s0_1_0, 0xFFE8E1E8, 0x2E7F8124, 0x060A0218, 0xF1E7B8D8);
	r5 = D(r5, s0_1_0, 0x1B1F15AC, 0x2E23DCF8, 0xFD16E316, 0x0CF319E4);
	r0 = D(r0, s0_1_1, 0xCE00BF81, 0xFAC026CF, 0xDCB01220, 0x8114EFAE);
	r1 = D(r1, s0_1_1, 0xC38103F9, 0xF0B6E41D, 0xE1ED26EE, 0x0DFBDEBE);
	r2 = D(r2, s0_1_1, 0x0D0122FF, 0xBAF40FEC, 0xFA0618F3, 0x2FDBFE81);
	r3 = D(r3, s0_1_1, 0xEFC2FBFB, 0xFACCF10C, 0xF4C0FFDB, 0xE41EE7F8);
	r4 = D(r4, s0_1_1, 0xF9070803, 0xEAF23311, 0x43CEEB07, 0xCFB8302B);
	r5 = D(r5, s0_1_1, 0x2D050E12, 0x0B2F1AEB, 0x1208F921, 0x0D1B070D);
	r0 = D(r0, s0_1_2, 0x8145252C, 0x0CE6D524, 0xBB03F218, 0x1D25DFDC);
	r1 = D(r1, s0_1_2, 0xF70FF2FF, 0x30E1F901, 0x1119ED06, 0xE81BE405);
	r2 = D(r2, s0_1_2, 0x09FA03FE, 0xD6DF2152, 0x3209EAFD, 0xF60B13EA);
	r3 = D(r3, s0_1_2, 0xECEB0CFF, 0x1DFE0306, 0x130407FF, 0x050A03FE);
	r4 = D(r4, s0_1_2, 0xDD28ECF5, 0xF1FEF7FC, 0x3CEFEEFF, 0xF226F508);
	r5 = D(r5, s0_1_2, 0x1DFF0809, 0xF9ED1605, 0x09E00E05, 0xFB0105F8);
	r0 = D(r0, s0_2_0, 0x08FEF5FD, 0xF0F00C09, 0x1A60C1E7, 0x28D1F604);
	r1 = D(r1, s0_2_0, 0x03F401FF, 0xF817F2FE, 0x0105F4EF, 0xFAD321F8);
	r2 = D(r2, s0_2_0, 0x040E09F5, 0x0C0B06E8, 0x03F41307, 0x01ED0D01);
	r3 = D(r3, s0_2_0, 0xEC0815F7, 0xEFF81C01, 0x1803F7F8, 0x02FEFEFE);
	r4 = D(r4, s0_2_0, 0xFD030AEA, 0xF1D013EF, 0xF30C07FD, 0xF5F714F5);
	r5 = D(r5, s0_2_0, 0x2E0CD2F6, 0x0B0CF41C, 0xEDD627DF, 0x0118EB03);
	r0 = D(r0, s0_2_1, 0x080514E3, 0x3149CFFD, 0x073000FC, 0x1217000F);
	r1 = D(r1, s0_2_1, 0x120301FD, 0x0309F800, 0x05080609, 0x0C12FDE2);
	r2 = D(r2, s0_2_1, 0xFA0301F9, 0xE5FDF814, 0xF8FCFA02, 0xF025F5F7);
	r3 = D(r3, s0_2_1, 0xFF05F904, 0xFFEF00F4, 0x1608FFFC, 0x04FC0201);
	r4 = D(r4, s0_2_1, 0x00F20308, 0xFAEE09FF, 0xF8FFF8FC, 0x120D07F9);
	r5 = D(r5, s0_2_1, 0x1807091E, 0xFB1605F6, 0xE8ED0C05, 0x11080003);
	r0 = D(r0, s0_2_2, 0xEF17EE0B, 0xED0611F2, 0xEA180DFE, 0xF8D9052A);
	r1 = D(r1, s0_2_2, 0xFEF50BE0, 0xFE020CF0, 0x0104FBF1, 0x050BEF07);
	r2 = D(r2, s0_2_2, 0xF300FFFE, 0xFE1208FE, 0xF9F706FF, 0xFCFEFB05);
	r3 = D(r3, s0_2_2, 0x0AFE0100, 0xE7040BFF, 0x1002F8FF, 0xFFFE0202);
	r4 = D(r4, s0_2_2, 0x0AF3FCF7, 0xFBF4F903, 0xF80100FA, 0xEDFEFF01);
	r5 = D(r5, s0_2_2, 0x12E4FF02, 0xF510F503, 0x0CF2FD06, 0xF90CFDF8);
	r0 = D(r0, s1_0_0, 0xFEEC0C0B, 0xF93C06FE, 0xFCE6E320, 0x1BE22504);
	r1 = D(r1, s1_0_0, 0x04A71942, 0x060CEBF7, 0x092F00BE, 0x07D7F504);
	r2 = D(r2, s1_0_0, 0xFEFB0FF9, 0x07F5BFF2, 0x0509FA2C, 0x05F818FA);
	r3 = D(r3, s1_0_0, 0xFF0106FE, 0x02E61E23, 0x07E0F9F5, 0xFBFCFE14);
	r4 = D(r4, s1_0_0, 0x0E072315, 0x0AFE0491, 0xF808F4F5, 0xF1FC1128);
	r5 = D(r5, s1_0_0, 0x1BE124B0, 0xFCF914DA, 0xFACFE905, 0x05FBFB07);
	r0 = D(r0, s1_0_1, 0xFDE51B0B, 0xF62316F7, 0xE724D103, 0x0CD44009);
	r1 = D(r1, s1_0_1, 0x01FF16D9, 0xF7F11537, 0x14FE2B39, 0x00EEF112);
	r2 = D(r2, s1_0_1, 0xFDF80D12, 0xFA48D0FE, 0xFFFD12E6, 0x02F2160D);
	r3 = D(r3, s1_0_1, 0x050607F8, 0xFB2213FB, 0x1AF7BA08, 0xFB04F90E);
	r4 = D(r4, s1_0_1, 0x33F7EEB3, 0x0EE8F721, 0xFBEC15FA, 0x0012DF1D);
	r5 = D(r5, s1_0_1, 0x0E19EF02, 0x0A152404, 0xEFCA23F9, 0x0AFDE709);
	r0 = D(r0, s1_0_2, 0xF60E09EE, 0x13F3F9DD, 0xF525DE1B, 0xF8DF4F0B);
	r1 = D(r1, s1_0_2, 0x1909F3FD, 0x0FF5DF07, 0x1810F8FF, 0xFE06EEBE);
	r2 = D(r2, s1_0_2, 0xFF040202, 0x043EF029, 0xFBFBFCF5, 0xF5FBADF9);
	r3 = D(r3, s1_0_2, 0xF70609ED, 0x0FE2003E, 0x02EF0BFD, 0x0002FC02);
	r4 = D(r4, s1_0_2, 0x19EE041E, 0x16FED50B, 0xFBFEF8FC, 0x12F6072D);
	r5 = D(r5, s1_0_2, 0x01F3FC3E, 0x0B02071A, 0xFDE2FED8, 0x05000002);
	r0 = D(r0, s1_1_0, 0x0705F7E5, 0x151C1502, 0x0213F7A2, 0x003FA281);
	r1 = D(r1, s1_1_0, 0xFFDD630F, 0x0CEF07CA, 0x1711EE14, 0x0514DAC0);
	r2 = D(r2, s1_1_0, 0x0417172B, 0xF8DBEC7F, 0x00E00EFF, 0x12E4F719);
	r3 = D(r3, s1_1_0, 0xFB1B04FF, 0xE7E610E2, 0x13F3F517, 0x11F906B7);
	r4 = D(r4, s1_1_0, 0xE5DFCF0D, 0x141AEAD2, 0x04FC0207, 0x17F3EE06);
	r5 = D(r5, s1_1_0, 0xFFDD3F1E, 0xF5F4151D, 0xDC25FE2A, 0x071BF210);
	r0 = D(r0, s1_1_1, 0xFFB6B5DA, 0xFEF6D83A, 0x2205FE82, 0x0C108126);
	r1 = D(r1, s1_1_1, 0xFD06B8CD, 0xF2E7E24F, 0x21160A3F, 0x2607184A);
	r2 = D(r2, s1_1_1, 0x06F822DD, 0xE8D31481, 0x0ACDF831, 0xF94DF3F5);
	r3 = D(r3, s1_1_1, 0xFF00012F, 0xEF1E1FDD, 0x131A05ED, 0x09FA0318);
	r4 = D(r4, s1_1_1, 0xC2512DFA, 0x2235045A, 0xFFFB1039, 0x0481CB8C);
	r5 = D(r5, s1_1_1, 0x08C22EE2, 0x180D29E7, 0xDCA4C124, 0x08EBFEE0);
	r0 = D(r0, s1_1_2, 0xFF02DB1C, 0x160BDF01, 0x11081C26, 0xDEBAF6F6);
	r1 = D(r1, s1_1_2, 0x0F06F9DF, 0x3616FADB, 0xFFF7EDE6, 0x30E8141D);
	r2 = D(r2, s1_1_2, 0xF7FA0C04, 0x14121E94, 0x03FD03F2, 0x11000B0A);
	r3 = D(r3, s1_1_2, 0x0903F30F, 0x012905E6, 0xFEDEF7F6, 0x03020AF9);
	r4 = D(r4, s1_1_2, 0x050C9C31, 0x16F9F323, 0xFEEAC100, 0x1B1E34FE);
	r5 = D(r5, s1_1_2, 0xFB0E22F8, 0xDBE904E6, 0x49FB45D7, 0xF309FCE9);
	r0 = D(r0, s1_2_0, 0xE7D9EA1E, 0x0CF8F01A, 0xCA13EC41, 0xD5E5333F);
	r1 = D(r1, s1_2_0, 0x32B1060A, 0xF545D121, 0xF0F10A00, 0x0BF410E9);
	r2 = D(r2, s1_2_0, 0x0501F0E1, 0xFCE30D11, 0x08DAD6F0, 0x13DD020B);
	r3 = D(r3, s1_2_0, 0x0211F2FD, 0x00EFDAFC, 0xFDD5FC0D, 0xFEFD0606);
	r4 = D(r4, s1_2_0, 0xFCD622EA, 0x0D1C06C9, 0x0104F006, 0xF9D9DEF8);
	r5 = D(r5, s1_2_0, 0xFFB7201B, 0xFF04F9FC, 0x0E2312FF, 0xFCEF06ED);
	r0 = D(r0, s1_2_1, 0xE8A91EB4, 0x1CEA11B4, 0xD817EA52, 0xF84C3135);
	r1 = D(r1, s1_2_1, 0x0610F115, 0x160809F1, 0xF10EF9DD, 0xED1823F9);
	r2 = D(r2, s1_2_1, 0x08FE12F2, 0x26DBFC15, 0xE9ED0222, 0x02EEE3F2);
	r3 = D(r3, s1_2_1, 0x1E1503EF, 0xE6F50321, 0x170F07FC, 0xFC1110F7);
	r4 = D(r4, s1_2_1, 0x13E6022B, 0x0DEDEAFC, 0x0BFAF1F2, 0xF1312250);
	r5 = D(r5, s1_2_1, 0xF4D7E0FA, 0xFF9B0407, 0xD800F2FC, 0xF7E21E10);
	r0 = D(r0, s1_2_2, 0x15F5F850, 0x16E63712, 0x341C1D06, 0x05E77C22);
	r1 = D(r1, s1_2_2, 0xE21306FE, 0xF30A21CC, 0x02190BF6, 0x31010F13);
	r2 = D(r2, s1_2_2, 0x0204010D, 0x0A17E422, 0x0603EDFF, 0x0E081007);
	r3 = D(r3, s1_2_2, 0x07FA08FB, 0xF3FDDA05, 0x0000FAFA, 0xF700EDFE);
	r4 = D(r4, s1_2_2, 0x1C002BFB, 0x22020C0F, 0xEE20DDF4, 0xD443CFD7);
	r5 = D(r5, s1_2_2, 0xF6E2DCF3, 0x22060724, 0xEDF43CE8, 0xFE1304F7);
	s0_0_0 = G[2][xy.y+0][xy.x+0]; s0_0_1 = G[2][xy.y+0][xy.x+1];
	s0_0_2 = G[2][xy.y+0][xy.x+2]; s0_1_0 = G[2][xy.y+1][xy.x+0];
	s0_1_1 = G[2][xy.y+1][xy.x+1]; s0_1_2 = G[2][xy.y+1][xy.x+2];
	s0_2_0 = G[2][xy.y+2][xy.x+0]; s0_2_1 = G[2][xy.y+2][xy.x+1];
	s0_2_2 = G[2][xy.y+2][xy.x+2]; s1_0_0 = G[3][xy.y+0][xy.x+0];
	s1_0_1 = G[3][xy.y+0][xy.x+1]; s1_0_2 = G[3][xy.y+0][xy.x+2];
	s1_1_0 = G[3][xy.y+1][xy.x+0]; s1_1_1 = G[3][xy.y+1][xy.x+1];
	s1_1_2 = G[3][xy.y+1][xy.x+2]; s1_2_0 = G[3][xy.y+2][xy.x+0];
	s1_2_1 = G[3][xy.y+2][xy.x+1]; s1_2_2 = G[3][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0xE8FE22EA, 0x18EAEEF2, 0xD2082E39, 0x0ABDFCEE);
	r1 = D(r1, s0_0_0, 0x10FDEEFC, 0x02E402DA, 0x1FD6E3EC, 0xF715030F);
	r2 = D(r2, s0_0_0, 0x01F502F9, 0xDDF534E2, 0xF8F50AF0, 0xF6040EFA);
	r3 = D(r3, s0_0_0, 0xFCFF0702, 0xEE120624, 0xFBFE0FEC, 0xF8000EF9);
	r4 = D(r4, s0_0_0, 0xF3001202, 0x0BEFFA06, 0x0700F6FF, 0x070DFFFD);
	r5 = D(r5, s0_0_0, 0xFA05F119, 0xFAEB0711, 0x1E28DFDB, 0xEDFA1206);
	r0 = D(r0, s0_0_1, 0xFAF515F6, 0x23FCCCF4, 0xEBF22CCD, 0x1AE91EEA);
	r1 = D(r1, s0_0_1, 0x1F01EAD7, 0x0DF5EE09, 0x5BCCBBD7, 0xE9ED0718);
	r2 = D(r2, s0_0_1, 0xFFEA01FB, 0xDA15240E, 0x20EFF5E6, 0xF7F5FC19);
	r3 = D(r3, s0_0_1, 0x0407000F, 0xDEF52403, 0xF80219D5, 0x0D01F607);
	r4 = D(r4, s0_0_1, 0x17F6F2C9, 0x14F5DFE6, 0x0AFCEF10, 0xD60930EE);
	r5 = D(r5, s0_0_1, 0x0235E9E2, 0x0416E710, 0xDFED2FC2, 0xF80010F7);
	r0 = D(r0, s0_0_2, 0x06050AFF, 0xFFE61507, 0x1BF10419, 0x0D0DE5FC);
	r1 = D(r1, s0_0_2, 0xE2FA1BF6, 0xFF0008F9, 0x03F60732, 0x0BEE18EC);
	r2 = D(r2, s0_0_2, 0x0006090B, 0x05F9D74C, 0xF90811F4, 0xD23735B6);
	r3 = D(r3, s0_0_2, 0x06F3F8FA, 0xD41D2301, 0x0ED90700, 0x05FFFB03);
	r4 = D(r4, s0_0_2, 0x1B0DD8DC, 0x09E8FFFF, 0x00F3F4F7, 0xF01AF60D);
	r5 = D(r5, s0_0_2, 0xE928FF18, 0xF2180A10, 0x040708E2, 0xFEED0804);
	r0 = D(r0, s0_1_0, 0x070308EC, 0x1002FAEC, 0x10F41CE7, 0x3112D9CD);
	r1 = D(r1, s0_1_0, 0xBCF30B2F, 0x25F5F405, 0xC5072905, 0xDFEE0F2B);
	r2 = D(r2, s0_1_0, 0xFC04020B, 0xEF051EEC, 0x19EBE2D0, 0xEE1409EF);
	r3 = D(r3, s0_1_0, 0x1306E8FD, 0x03FD17FC, 0xE4EA26B0, 0x02FB03EA);
	r4 = D(r4, s0_1_0, 0x0501FCF1, 0x0BF1ECFE, 0x140BEBFD, 0xCAF046F0);
	r5 = D(r5, s0_1_0, 0xF00DF0F9, 0xFE1DE900, 0x07D8F4F4, 0xE6012114);
	r0 = D(r0, s0_1_1, 0x0D1BC3FA, 0x1030C7FE, 0x2506D2FD, 0xFA4B0404);
	r1 = D(r1, s0_1_1, 0x24E4D2FF, 0x01F62BF0, 0xBD042B1C, 0xAEEE321D);
	r2 = D(r2, s0_1_1, 0xEDC60B06, 0xBCAA161E, 0x0F06E900, 0xD10C1853);
	r3 = D(r3, s0_1_1, 0xDF041F0C, 0xBAC375E2, 0xF761007F, 0x0AEDF013);
	r4 = D(r4, s0_1_1, 0xCC12011D, 0xCA49241F, 0xC5144944, 0x15B1E05A);
	r5 = D(r5, s0_1_1, 0x7F1AA3D9, 0x817F1DFB, 0x3214F753, 0xF6FC00DB);
	r0 = D(r0, s0_1_2, 0xF940FE10, 0xE30F5BFE, 0x04EDD1F2, 0xA6372B2D);
	r1 = D(r1, s0_1_2, 0x5547C2D8, 0x03E0E1FC, 0x010D37DA, 0x2529F514);
	r2 = D(r2, s0_1_2, 0x1DF7ECFB, 0xCF921DCC, 0xF9241AD6, 0x9FB18103);
	r3 = D(r3, s0_1_2, 0xF4F4FF0E, 0xBC591D03, 0xFCDDDC04, 0xF1040806);
	r4 = D(r4, s0_1_2, 0x3845E9F3, 0x2D11DD15, 0x1DD2FACC, 0x34FCC30C);
	r5 = D(r5, s0_1_2, 0x2BD70AD3, 0x1939ECFD, 0xB74AF8FD, 0x02FF1F0B);
	r0 = D(r0, s0_2_0, 0x0EF1E4EB, 0xF5FCFC00, 0x4316D6F0, 0x2C1AC604);
	r1 = D(r1, s0_2_0, 0xC5FB120E, 0x00FB0C17, 0xE3FC1108, 0xEFF7F0DC);
	r2 = D(r2, s0_2_0, 0xFFF4000E, 0x2DF6DBF8, 0x3800DA33, 0x23F1E206);
	r3 = D(r3, s0_2_0, 0x09F104FA, 0x09F01005, 0xF5F11804, 0xF307F9EF);
	r4 = D(r4, s0_2_0, 0xFDEC1303, 0x0B0DEE11, 0x1701ECFE, 0xFD20F71E);
	r5 = D(r5, s0_2_0, 0xB31B1043, 0x06000B11, 0x20FBE3E6, 0xF40E1001);
	r0 = D(r0, s0_2_1, 0x2BF5E315, 0xFC06100F, 0x2EEFD24D, 0xFAD1EBCE);
	r1 = D(r1, s0_2_1, 0xB3CF2716, 0x129BC011, 0x04F4E702, 0x2FCBC4E1);
	r2 = D(r2, s0_2_1, 0x1BF002FD, 0x0DC7FE0A, 0xD316FF1B, 0xF51E1B13);
	r3 = D(r3, s0_2_1, 0x24BDF3D6, 0x4CABEAE9, 0xF72304E2, 0xEFD7F4F4);
	r4 = D(r4, s0_2_1, 0xEB383013, 0x42F9B801, 0xE11B45FE, 0x213CAFE7);
	r5 = D(r5, s0_2_1, 0xDC131920, 0x0F24EAF7, 0x28030106, 0x30D9032E);
	r0 = D(r0, s0_2_2, 0xF1D5E445, 0x2BD4814E, 0x18A4DE01, 0x81F77319);
	r1 = D(r1, s0_2_2, 0x15BACCFE, 0xA4EF7F03, 0xF9E815E7, 0x8181811C);
	r2 = D(r2, s0_2_2, 0x0415FE0B, 0x03EC08EC, 0x030B0105, 0xA1FE4614);
	r3 = D(r3, s0_2_2, 0xE1142409, 0x030EEE26, 0xBB8142EB, 0x1016EC05);
	r4 = D(r4, s0_2_2, 0xCB1539EE, 0x0CD29615, 0xB23260F3, 0xFD9A7FD6);
	r5 = D(r5, s0_2_2, 0x14BFBEEC, 0xB55130F7, 0x291CCF1A, 0x52DD13F8);
	r0 = D(r0, s1_0_0, 0x1DDCEB16, 0x08FBF101, 0x34FEC90A, 0xDCED1C1E);
	r1 = D(r1, s1_0_0, 0xB1444BFF, 0xEDF42309, 0x1305E603, 0x22EBEF0B);
	r2 = D(r2, s1_0_0, 0x0CF8F703, 0x15D0F232, 0xFE0A02F6, 0x161EF3E4);
	r3 = D(r3, s1_0_0, 0xDB132AF1, 0x2507ECBA, 0x12EDFD0C, 0xF3FE15FA);
	r4 = D(r4, s1_0_0, 0xEE2DFFEE, 0x1806E7F4, 0xF80708FD, 0x3906AD24);
	r5 = D(r5, s1_0_0, 0xD8FC2F13, 0x0AF9FD0A, 0xC10C3BFD, 0x01FAFB0D);
	r0 = D(r0, s1_0_1, 0xEA0216FD, 0x0827F0F0, 0xF3F703F8, 0xD8F32E06);
	r1 = D(r1, s1_0_1, 0xCA202C09, 0xD509E313, 0x15FED021, 0x2A2EB5E3);
	r2 = D(r2, s1_0_1, 0xEF0D16F7, 0x1AF2C719, 0xDD0229F1, 0xF90918F1);
	r3 = D(r3, s1_0_1, 0x0801F9F9, 0x6EF38181, 0x06FFFA14, 0x19F1E30C);
	r4 = D(r4, s1_0_1, 0x94F9790D, 0x1ECACF38, 0x35FCD2FD, 0xD9012CEA);
	r5 = D(r5, s1_0_1, 0x2213DFF3, 0xE11CE816, 0xCE28380E, 0xF6F10B09);
	r0 = D(r0, s1_0_2, 0xF3050609, 0xD9E81F1A, 0x01E8FA16, 0x3EE6D21F);
	r1 = D(r1, s1_0_2, 0xCEE72D0C, 0x10FEF3FF, 0xFFC90026, 0x973078E8);
	r2 = D(r2, s1_0_2, 0x15FBF0F7, 0x04E2CE38, 0x1BF3EF00, 0x81B97F38);
	r3 = D(r3, s1_0_2, 0xDE1520FB, 0x2E2BCFD6, 0xEFE91116, 0xFD000CF7);
	r4 = D(r4, s1_0_2, 0x0121E101, 0x06F7E70F, 0xE4F72505, 0x00CEF51F);
	r5 = D(r5, s1_0_2, 0x50F5A409, 0x08F90AFD, 0xE10E36EE, 0xF9F9FF11);
	r0 = D(r0, s1_1_0, 0xE62E28FC, 0xF90105F8, 0x2E23BD12, 0x2200D412);
	r1 = D(r1, s1_1_0, 0x0D1EF4A2, 0x3004E7E5, 0x2D0AD812, 0xF318EBEE);
	r2 = D(r2, s1_1_0, 0xEDFC1204, 0x2DFDED10, 0xB4334DED, 0x071CEEFE);
	r3 = D(r3, s1_1_0, 0xFFEDF9FF, 0x0310D425, 0x0003141B, 0xF00F15EF);
	r4 = D(r4, s1_1_0, 0xEA5621D9, 0xEEDEFA38, 0xFEEF0910, 0x2F21EA00);
	r5 = D(r5, s1_1_0, 0xA7CC4D05, 0x05F9FF15, 0xE707E2DD, 0x15FCE601);
	r0 = D(r0, s1_1_1, 0xB8061C27, 0x5905AFEE, 0xE2ED39E5, 0x08FA0465);
	r1 = D(r1, s1_1_1, 0x09BC0AEE, 0xB9E13695, 0x45F7C1E0, 0x64FA81DF);
	r2 = D(r2, s1_1_1, 0xE33012F5, 0x210CC3C1, 0x81EF7F1F, 0xCD0B31C5);
	r3 = D(r3, s1_1_1, 0x6FDB812F, 0xFBF22308, 0xEB0D11DE, 0x1DFBE200);
	r4 = D(r4, s1_1_1, 0x81817F81, 0x21E8BC81, 0x1116E2F9, 0x81B466B7);
	r5 = D(r5, s1_1_1, 0xBF0354FA, 0xEE26F6F8, 0x81817F81, 0xEAF81C03);
	r0 = D(r0, s1_1_2, 0x17E3F70E, 0xDCDD2628, 0xCBF90E24, 0x9C0770E5);
	r1 = D(r1, s1_1_2, 0xFE01080D, 0x0745F3D9, 0x0F0E0BEC, 0x19DCF6E2);
	r2 = D(r2, s1_1_2, 0xF20D1203, 0x171702E9, 0xC61247F0, 0x81C6659B);
	r3 = D(r3, s1_1_2, 0x00FFFAF3, 0xFE15EE0F, 0xE9F71D0C, 0xFAF60604);
	r4 = D(r4, s1_1_2, 0xC4E93CAE, 0x09F9F201, 0xE0E730FE, 0xF71DEA36);
	r5 = D(r5, s1_1_2, 0x1E40CAF6, 0x1C05FF12, 0x0C50EDD0, 0x3106CD03);
	r0 = D(r0, s1_2_0, 0x0DE211E8, 0xED070BFA, 0x10F9E91E, 0xD80748EF);
	r1 = D(r1, s1_2_0, 0xDBD12ECE, 0xECD00527, 0xEE031FED, 0x1ADBFD24);
	r2 = D(r2, s1_2_0, 0xF0EC08F6, 0xDB0A2A2A, 0xDE0912D5, 0x38DDC61F);
	r3 = D(r3, s1_2_0, 0x09F2EDEB, 0x0CF7E32E, 0xF60617F1, 0x2B21E032);
	r4 = D(r4, s1_2_0, 0x2CDCE20A, 0xF903F511, 0xF9E90109, 0xF3F40903);
	r5 = D(r5, s1_2_0, 0xB2FE69EA, 0xE11A23DA, 0x4411B00D, 0x0BFDF1CF);
	r0 = D(r0, s1_2_1, 0xDFEB08B0, 0x1F0AE6E8, 0x81D37E2E, 0x282BB6F1);
	r1 = D(r1, s1_2_1, 0xF2131CEE, 0xCB1C08F1, 0x1714EDEC, 0x36F0DC07);
	r2 = D(r2, s1_2_1, 0x1EFCE009, 0x1D02F6A2, 0x81A66A88, 0xBA444AEE);
	r3 = D(r3, s1_2_1, 0x357AD97F, 0x09FC1233, 0x0B3519FB, 0x1610EB03);
	r4 = D(r4, s1_2_1, 0xE9EE1ADA, 0x0E3CF20F, 0xD8112FF6, 0x0FEB2107);
	r5 = D(r5, s1_2_1, 0xCEA82E2D, 0x3D1B8181, 0xBBB44FE3, 0xD0D331E9);
	r0 = D(r0, s1_2_2, 0xB81864DC, 0x8BE55F81, 0x922A59D4, 0xF624008C);
	r1 = D(r1, s1_2_2, 0x1006F7E0, 0x24E9DE39, 0xF6180EF4, 0x1009E5E3);
	r2 = D(r2, s1_2_2, 0xECF01013, 0x0A170CF9, 0xFCF610EE, 0x819E7FC1);
	r3 = D(r3, s1_2_2, 0x15FCEBF1, 0xE2EF1430, 0x0400FFF4, 0xF9F50509);
	r4 = D(r4, s1_2_2, 0x3402DCD5, 0xE9101BFC, 0x2617DD07, 0x23F9B8E7);
	r5 = D(r5, s1_2_2, 0x26FCD543, 0x0DFEF706, 0x3814BD23, 0x1905DCFC);
	s0_0_0 = G[4][xy.y+0][xy.x+0]; s0_0_1 = G[4][xy.y+0][xy.x+1];
	s0_0_2 = G[4][xy.y+0][xy.x+2]; s0_1_0 = G[4][xy.y+1][xy.x+0];
	s0_1_1 = G[4][xy.y+1][xy.x+1]; s0_1_2 = G[4][xy.y+1][xy.x+2];
	s0_2_0 = G[4][xy.y+2][xy.x+0]; s0_2_1 = G[4][xy.y+2][xy.x+1];
	s0_2_2 = G[4][xy.y+2][xy.x+2]; s1_0_0 = G[5][xy.y+0][xy.x+0];
	s1_0_1 = G[5][xy.y+0][xy.x+1]; s1_0_2 = G[5][xy.y+0][xy.x+2];
	s1_1_0 = G[5][xy.y+1][xy.x+0]; s1_1_1 = G[5][xy.y+1][xy.x+1];
	s1_1_2 = G[5][xy.y+1][xy.x+2]; s1_2_0 = G[5][xy.y+2][xy.x+0];
	s1_2_1 = G[5][xy.y+2][xy.x+1]; s1_2_2 = G[5][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0xF4EA1EFA, 0xF6F3F930, 0xD4E7332B, 0xF0F91DAA);
	r1 = D(r1, s0_0_0, 0x2431CC45, 0x0A1DEC28, 0x23370DC1, 0x18EDE70B);
	r2 = D(r2, s0_0_0, 0xF2F11C09, 0x2712C12E, 0x1225D1F5, 0xF70F0A24);
	r3 = D(r3, s0_0_0, 0xFD0304EA, 0xD6E02C21, 0x10020CF6, 0xFCFCFBE9);
	r4 = D(r4, s0_0_0, 0x0660D407, 0xF3081DFD, 0x0813E306, 0xE9CD3A1C);
	r5 = D(r5, s0_0_0, 0x1D20CF18, 0x08FAF9EF, 0x2E0ABB42, 0xF2FE1308);
	r0 = D(r0, s0_0_1, 0x0EF8E0FD, 0x5306F2A8, 0xC4F4098B, 0xF7AC7E0D);
	r1 = D(r1, s0_0_1, 0x07F11CF1, 0xEEE1D009, 0xECFBF0E9, 0x28DC08F0);
	r2 = D(r2, s0_0_1, 0x04F8E8FE, 0x19E3EA07, 0x1B08FF03, 0x0136380E);
	r3 = D(r3, s0_0_1, 0xFC14FD00, 0xEFF38113, 0xEB0D0501, 0x02E41DF3);
	r4 = D(r4, s0_0_1, 0x2923194D, 0x191BD208, 0xFA04F31A, 0x0D38BA25);
	r5 = D(r5, s0_0_1, 0x1C2A942F, 0x190614CE, 0x8FC42B21, 0xFCFD0606);
	r0 = D(r0, s0_0_2, 0xF9FD0FF4, 0xEE0CF023, 0x28D9F6D9, 0x0F06E714);
	r1 = D(r1, s0_0_2, 0xFA0C06FF, 0x05FBF909, 0xFC3AE1D5, 0xD2BD6804);
	r2 = D(r2, s0_0_2, 0x0B0300F2, 0x3135CFFF, 0xF013FCF7, 0xE5E51D3B);
	r3 = D(r3, s0_0_2, 0x0509F9F7, 0xFCD10116, 0x0A08EF0D, 0x01EE14FC);
	r4 = D(r4, s0_0_2, 0x0EF50C02, 0xF3FCF234, 0xEF32DB02, 0xEE031AFA);
	r5 = D(r5, s0_0_2, 0x2B19C60F, 0xF629D301, 0xF6C43705, 0xF70CFA04);
	r0 = D(r0, s0_1_0, 0x402FE421, 0x1101E913, 0x1B7FA317, 0x576799E6);
	r1 = D(r1, s0_1_0, 0xDB0BD31F, 0x0B1CF4FD, 0x11D7CA30, 0x14EB18F6);
	r2 = D(r2, s0_1_0, 0x00EADC01, 0x20ECA806, 0x000CE919, 0x01CE29F1);
	r3 = D(r3, s0_1_0, 0xEBA02421, 0xE0E61404, 0x3735E918, 0x23600627);
	r4 = D(r4, s0_1_0, 0xF2EB2CC8, 0x2FFAFC16, 0xEBB94108, 0x2A17B1F9);
	r5 = D(r5, s0_1_0, 0xE0817F81, 0xE5BA8144, 0x04D14BE3, 0xFC06DE0C);
	r0 = D(r0, s0_1_1, 0xFFE3E7F4, 0xD8DE05AA, 0x0B6901FD, 0x14EA4FDF);
	r1 = D(r1, s0_1_1, 0x3127F6E0, 0x37FEC2E4, 0x1610FA1E, 0x071A81F7);
	r2 = D(r2, s0_1_1, 0xECFD300A, 0x3B15DDB5, 0xE4031AFE, 0xAEED43C9);
	r3 = D(r3, s0_1_1, 0xF622D302, 0x0D31CDF2, 0xEFDDDF11, 0x2812DFFF);
	r4 = D(r4, s0_1_1, 0xC3A5CC14, 0x0BF38122, 0x81DB81A6, 0x407F9631);
	r5 = D(r5, s0_1_1, 0xCFE145FA, 0xE4E032F5, 0x344F22EB, 0xF503EA02);
	r0 = D(r0, s0_1_2, 0x4D08DEEB, 0xFAB04AE5, 0x4619ACFC, 0xAB3BB919);
	r1 = D(r1, s0_1_2, 0xF439F3FC, 0xD1F83AF2, 0xD5CF4A13, 0x2ADE010F);
	r2 = D(r2, s0_1_2, 0xF6F80412, 0x1F2BDFEC, 0xD3011711, 0x81A85926);
	r3 = D(r3, s0_1_2, 0x0308F00D, 0xF106FFF4, 0xF6FD0314, 0xFB0205FD);
	r4 = D(r4, s0_1_2, 0x0D03F6DF, 0x124ABAE9, 0xD9D84A06, 0xF131E9C6);
	r5 = D(r5, s0_1_2, 0xF1FC0F06, 0xF7F30B36, 0xF20B0014, 0x03030CEC);
	r0 = D(r0, s0_2_0, 0x0122B727, 0x0F2ED228, 0xE1C63601, 0xE1ED5103);
	r1 = D(r1, s0_2_0, 0xFDFD0A3F, 0xFC110814, 0x0AF0F024, 0x145CBDDB);
	r2 = D(r2, s0_2_0, 0xFC1AF1FB, 0xF0A93E1E, 0xF8C14301, 0xFD2DD2E9);
	r3 = D(r3, s0_2_0, 0x1848DBEA, 0x0AED01F9, 0xFFE2F2D2, 0x0A28E326);
	r4 = D(r4, s0_2_0, 0xFE01F413, 0xE6D349DB, 0x14F8F104, 0xEFBA4309);
	r5 = D(r5, s0_2_0, 0xD2AC6B0A, 0xE9F32AFA, 0x0608E5BB, 0x03FC0123);
	r0 = D(r0, s0_2_1, 0x0720D210, 0xEB1EF259, 0xD4FC1115, 0xF7AEB831);
	r1 = D(r1, s0_2_1, 0xE9E41FFF, 0x04C242FA, 0x0DF41013, 0xFE16F14C);
	r2 = D(r2, s0_2_1, 0x020BF2FF, 0x11F8EB0C, 0x1DFFF808, 0x1A915D25);
	r3 = D(r3, s0_2_1, 0x0DCB37E9, 0xF22CFFCB, 0x0118E804, 0xF5EB1AE7);
	r4 = D(r4, s0_2_1, 0x10FE2505, 0xEF20CC0E, 0x0FE62706, 0xE5931ADE);
	r5 = D(r5, s0_2_1, 0xE7102E1F, 0x0318FFFF, 0xEC0F03E4, 0xF0E3F8F2);
	r0 = D(r0, s0_2_2, 0x2904BC16, 0x0615DAEE, 0xFE815508, 0x33019743);
	r1 = D(r1, s0_2_2, 0x02ED2CE2, 0xF5C43C1C, 0x070300F7, 0x02FCEF07);
	r2 = D(r2, s0_2_2, 0x0B16EAF7, 0xFC1FE1F3, 0xFCDE181B, 0xEA08FDBA);
	r3 = D(r3, s0_2_2, 0xFDFE09F2, 0x060AF215, 0x0C21E3EB, 0xFEEA0C10);
	r4 = D(r4, s0_2_2, 0xFC0402DD, 0x0F11FCCD, 0xF81CED01, 0x0FA23BF8);
	r5 = D(r5, s0_2_2, 0xEB0F16E0, 0x0904EB1E, 0xF1D31E20, 0x040A00EC);
	r0 = D(r0, s1_0_0, 0x0303001E, 0x0202FCDF, 0xF90DF607, 0x0EEF19FE);
	r1 = D(r1, s1_0_0, 0xECE6FFC0, 0x070118E8, 0xFAF620F8, 0xE80800F1);
	r2 = D(r2, s1_0_0, 0x000502F9, 0x0201FED8, 0x17050A03, 0xF107F905);
	r3 = D(r3, s1_0_0, 0xFE01FAF0, 0xFDEFE4FE, 0x170C090B, 0xFEF40300);
	r4 = D(r4, s1_0_0, 0x0310F213, 0x01FC0281, 0x030AFAF3, 0xFAF1F403);
	r5 = D(r5, s1_0_0, 0xF72CEFEE, 0xD613FEE4, 0x1B110200, 0xFEF900FC);
	r0 = D(r0, s1_0_1, 0x090DF607, 0xF7FDEDFA, 0x2DC8D7E8, 0x17EA3606);
	r1 = D(r1, s1_0_1, 0xCA05C436, 0xF518C9F7, 0xFFCE3100, 0x05081013);
	r2 = D(r2, s1_0_1, 0xF607EFF9, 0xF9B43716, 0xE9CD1503, 0x0C060217);
	r3 = D(r3, s1_0_1, 0xFBFEFC04, 0xEDDD813C, 0xFEFA0F11, 0xFEEA1101);
	r4 = D(r4, s1_0_1, 0x1331F1F6, 0x441248A5, 0xF406F707, 0x08FDD517);
	r5 = D(r5, s1_0_1, 0x05DD5905, 0x0CF726F1, 0xEB5081DA, 0xF9F1FF0B);
	r0 = D(r0, s1_0_2, 0xF7081B05, 0xFAEC0F1E, 0xCDD41912, 0x03FEE41A);
	r1 = D(r1, s1_0_2, 0x2EFC392B, 0xF3F3EAFF, 0x2AFEE200, 0xF4D9F7DD);
	r2 = D(r2, s1_0_2, 0xFD0116F3, 0x0001D4D2, 0xF9FCEE0C, 0x0E06D3E0);
	r3 = D(r3, s1_0_2, 0x02ECFBF3, 0xF70CFCF7, 0xEAF3FBFE, 0x03F6FE05);
	r4 = D(r4, s1_0_2, 0x0446E333, 0x76FF0E0F, 0x0DEE070A, 0xFC06020A);
	r5 = D(r5, s1_0_2, 0x08052EE3, 0x2431DEEC, 0xD4BEA53E, 0x0E0F05FB);
	r0 = D(r0, s1_1_0, 0x071313EE, 0x07FF1025, 0xD32CFC14, 0xE4120B2A);
	r1 = D(r1, s1_1_0, 0x0AF6E848, 0xF32504FB, 0xFEF305FB, 0xF5FB0B1B);
	r2 = D(r2, s1_1_0, 0xFDFDF8F6, 0x0D0DCE2C, 0xFA2304FA, 0x0D050E02);
	r3 = D(r3, s1_1_0, 0xFFFBF8FC, 0xFBF2E7E6, 0x031826FA, 0xFD020D1D);
	r4 = D(r4, s1_1_0, 0xF5F91123, 0x1B0A0D8A, 0x03FE0904, 0xEB021FFB);
	r5 = D(r5, s1_1_0, 0xFAE3EE15, 0x1C10FF19, 0xF5FD15DA, 0xF7F402FA);
	r0 = D(r0, s1_1_1, 0xEE27DB22, 0x0AF907E5, 0xF53127A2, 0x07FD15FF);
	r1 = D(r1, s1_1_1, 0xEFFBFDB0, 0x08F89039, 0xD2ECE72D, 0x26EC8157);
	r2 = D(r2, s1_1_1, 0x0B123F25, 0xFCD0D134, 0xF7EAF919, 0xFA0A0925);
	r3 = D(r3, s1_1_1, 0x07F1FE00, 0x12362C08, 0x04F3D80D, 0x090DF6EB);
	r4 = D(r4, s1_1_1, 0xF4E6D7FC, 0x7F1CE1A2, 0x1204E619, 0xF0F459ED);
	r5 = D(r5, s1_1_1, 0x1D1CF6DB, 0xD3FBFA7F, 0xEF401BC9, 0x0328F804);
	r0 = D(r0, s1_1_2, 0x1304E0EE, 0x16D12ED5, 0x2AC9011E, 0xFD618EE5);
	r1 = D(r1, s1_1_2, 0x0B3E08E7, 0x0C0033E0, 0x010DE1FD, 0x120708D9);
	r2 = D(r2, s1_1_2, 0x01F7D602, 0xE9FC81FE, 0x01F0D2FB, 0xF0C3065C);
	r3 = D(r3, s1_1_2, 0xFD00F6FC, 0x121536EC, 0x0C10020B, 0xFC0A03FA);
	r4 = D(r4, s1_1_2, 0xFFD6D9EB, 0x7F03F6CF, 0xF3F762DB, 0x0E6A23D5);
	r5 = D(r5, s1_1_2, 0xEDFA06FF, 0x7FF381FF, 0x0B08F725, 0x060F22EB);
	r0 = D(r0, s1_2_0, 0x000A0B0C, 0xF7FF0A0E, 0x1C08FE17, 0x121407DB);
	r1 = D(r1, s1_2_0, 0x0804F208, 0x02110A0F, 0x0B0703F1, 0x010224F7);
	r2 = D(r2, s1_2_0, 0xFE05000B, 0xFD04E6EB, 0xFD0B00FA, 0xF901FFE1);
	r3 = D(r3, s1_2_0, 0xF9FE0C18, 0xF001F9FB, 0x0507FEF5, 0x020710EF);
	r4 = D(r4, s1_2_0, 0x07FA0DC0, 0xE606FAE2, 0xF9FB01F4, 0x09150319);
	r5 = D(r5, s1_2_0, 0xECE5D610, 0xDC08F4DB, 0x0F000A03, 0x01F7F6ED);
	r0 = D(r0, s1_2_1, 0xF6FEE811, 0xFA15E5E4, 0xF102BE25, 0xEE15AD15);
	r1 = D(r1, s1_2_1, 0xEA18EFF4, 0x0BF7EAF3, 0xF7F412FB, 0xD41021F4);
	r2 = D(r2, s1_2_1, 0x0703FEFC, 0xF806F309, 0x18031D01, 0x0C02EECC);
	r3 = D(r3, s1_2_1, 0x0619FB00, 0x0D20FD04, 0xFB1625EE, 0xFDF4EA07);
	r4 = D(r4, s1_2_1, 0x03F91A05, 0x2018FC0E, 0xFCFEED08, 0x02183ACC);
	r5 = D(r5, s1_2_1, 0xFBE4C01B, 0xF6FDED18, 0x190D22FB, 0xF3EBF311);
	r0 = D(r0, s1_2_2, 0xFEF692C0, 0xF9FFDC2B, 0x0807D9EC, 0xEE00B4E8);
	r1 = D(r1, s1_2_2, 0x28251813, 0xF9F7F91B, 0x0206F7FD, 0x0F12D2F7);
	r2 = D(r2, s1_2_2, 0x030409F8, 0x230606F5, 0xFBFD08F6, 0xFBF006D4);
	r3 = D(r3, s1_2_2, 0xFDFBFF06, 0x0309EE07, 0xECF7DDF1, 0xFE05F502);
	r4 = D(r4, s1_2_2, 0xFA01CD00, 0x581009C3, 0xFD070307, 0x1113EF3D);
	r5 = D(r5, s1_2_2, 0x261EE0F5, 0xC4F8D5D4, 0x18060918, 0x05090412);
	f0 = vec4(r0) * 6.2000124e-05;
	f0 += vec4(2.802e-02, 9.368e-03, 2.835e-04, -5.514e-04);
	f0 = clamp(f0, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(0, 0), f0);
	f1 = vec4(r1) * 6.2000124e-05;
	f1 += vec4(4.504e-02, 6.454e-03, -1.425e-03, -5.945e-02);
	f1 = clamp(f1, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(1, 0), f1);
	f2 = vec4(r2) * 6.2000124e-05;
	f2 += vec4(-1.736e-03, -1.069e-02, 7.131e-02, 7.788e-02);
	f2 = clamp(f2, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(2, 0), f2);
	f3 = vec4(r3) * 6.2000124e-05;
	f3 += vec4(-3.598e-02, -3.137e-02, 1.209e-02, -8.698e-03);
	f3 = clamp(f3, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(0, 1), f3);
	f4 = vec4(r4) * 6.2000124e-05;
	f4 += vec4(5.091e-02, -4.445e-01, 2.908e-02, 1.453e-02);
	f4 = clamp(f4, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(1, 1), f4);
	f5 = vec4(r5) * 6.2000124e-05;
	f5 += vec4(2.387e-03, -5.578e-02, 3.581e-02, 4.931e-02);
	f5 = clamp(f5, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(2, 1), f5);
}

//!DESC [CuNNy_4x24_DS_vk] -conv2
//!HOOK LUMA
//!COMPUTE 24 16 8 8
//!BIND conv1
//!BIND LUMA
//!SAVE conv2
//!WIDTH LUMA.w 3 *
//!HEIGHT LUMA.h 2 *
//!COMPONENTS 4
//!WHEN OUTPUT.w LUMA.w 1.200 * > OUTPUT.h LUMA.h 1.200 * > *
#extension GL_EXT_spirv_intrinsics : require
#define l0(x, y) (conv1_mul * texelFetch(conv1_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(0, 0), 0))
#define l1(x, y) (conv1_mul * texelFetch(conv1_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(1, 0), 0))
#define l2(x, y) (conv1_mul * texelFetch(conv1_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(2, 0), 0))
#define l3(x, y) (conv1_mul * texelFetch(conv1_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(0, 1), 0))
#define l4(x, y) (conv1_mul * texelFetch(conv1_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(1, 1), 0))
#define l5(x, y) (conv1_mul * texelFetch(conv1_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(2, 1), 0))
spirv_instruction (extensions = ["SPV_KHR_integer_dot_product"], capabilities = [6019, 6018], id = 4450)
int dp4(int a, int b, spirv_literal int fmt);
#define D(r, s, a, b, c, d) r + ivec4(dp4(s, a, 0), dp4(s, b, 0), dp4(s, c, 0), dp4(s, d, 0))
shared int G[6][10][10];
void hook() {
	ivec2 xy = ivec2(gl_LocalInvocationID.xy);
	ivec2 pos = ivec2(gl_WorkGroupID.xy) * ivec2(8, 8) + xy;
	ivec2 opos = pos * ivec2(3, 2);
	ivec2 sz = ivec2(LUMA_size) - ivec2(1);
	for (int y = 0; y < 10; y += 8) {
		int ay = xy.y + y;
		if (ay >= 10) break;
		for (int x = 0; x < 10; x += 8) {
			int ax = xy.x + x;
			if (ax >= 10) break;
			vec4 v0 = l0(x - 1, y - 1) * 1.0000000e+00;
			vec4 v1 = l1(x - 1, y - 1) * 1.0000000e+00;
			vec4 v2 = l2(x - 1, y - 1) * 1.0000000e+00;
			vec4 v3 = l3(x - 1, y - 1) * 1.0000000e+00;
			vec4 v4 = l4(x - 1, y - 1) * 1.0000000e+00;
			vec4 v5 = l5(x - 1, y - 1) * 1.0000000e+00;
			G[0][ay][ax] = int(packSnorm4x8(v0));
			G[1][ay][ax] = int(packSnorm4x8(v1));
			G[2][ay][ax] = int(packSnorm4x8(v2));
			G[3][ay][ax] = int(packSnorm4x8(v3));
			G[4][ay][ax] = int(packSnorm4x8(v4));
			G[5][ay][ax] = int(packSnorm4x8(v5));
		}
	}
	barrier();
	int s0_0_0, s0_0_1, s0_0_2, s0_1_0, s0_1_1, s0_1_2, s0_2_0, s0_2_1, s0_2_2, s1_0_0, s1_0_1, s1_0_2, s1_1_0, s1_1_1, s1_1_2, s1_2_0, s1_2_1, s1_2_2;
	ivec4 r0, r1, r2, r3, r4, r5;
	vec4 f0, f1, f2, f3, f4, f5;
	r0 = ivec4(0); r1 = ivec4(0); r2 = ivec4(0); r3 = ivec4(0); r4 = ivec4(0); r5 = ivec4(0);
	s0_0_0 = G[0][xy.y+0][xy.x+0]; s0_0_1 = G[0][xy.y+0][xy.x+1];
	s0_0_2 = G[0][xy.y+0][xy.x+2]; s0_1_0 = G[0][xy.y+1][xy.x+0];
	s0_1_1 = G[0][xy.y+1][xy.x+1]; s0_1_2 = G[0][xy.y+1][xy.x+2];
	s0_2_0 = G[0][xy.y+2][xy.x+0]; s0_2_1 = G[0][xy.y+2][xy.x+1];
	s0_2_2 = G[0][xy.y+2][xy.x+2]; s1_0_0 = G[1][xy.y+0][xy.x+0];
	s1_0_1 = G[1][xy.y+0][xy.x+1]; s1_0_2 = G[1][xy.y+0][xy.x+2];
	s1_1_0 = G[1][xy.y+1][xy.x+0]; s1_1_1 = G[1][xy.y+1][xy.x+1];
	s1_1_2 = G[1][xy.y+1][xy.x+2]; s1_2_0 = G[1][xy.y+2][xy.x+0];
	s1_2_1 = G[1][xy.y+2][xy.x+1]; s1_2_2 = G[1][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0x01281CDD, 0x07FF10FE, 0x00171EE0, 0x160B2503);
	r1 = D(r1, s0_0_0, 0x03F7F90F, 0x05F8F700, 0x13ECEBDA, 0xFF030803);
	r2 = D(r2, s0_0_0, 0x321F26FC, 0x0001010B, 0x0AF7020C, 0xFC1E02E5);
	r3 = D(r3, s0_0_0, 0xF8F5DD1C, 0x00FEFA08, 0x13000F08, 0xF2FD07FE);
	r4 = D(r4, s0_0_0, 0xFBE8FFF4, 0x0A130AED, 0x0AFCF800, 0x1714EADE);
	r5 = D(r5, s0_0_0, 0xFE101710, 0xE90FEAEE, 0x08100FFA, 0x08092214);
	r0 = D(r0, s0_0_1, 0x08FD10DD, 0x030208FA, 0x2A0200DE, 0xFDFC07E1);
	r1 = D(r1, s0_0_1, 0xFB0307F7, 0x03010500, 0x0B04EFBB, 0x06FFFDFA);
	r2 = D(r2, s0_0_1, 0x0EF509E7, 0x0C0504F2, 0x09FFFCF9, 0xF7F62C0A);
	r3 = D(r3, s0_0_1, 0xFEECF607, 0xF8F90717, 0xF9F4FCE4, 0xFCF800F3);
	r4 = D(r4, s0_0_1, 0x0003ECF9, 0x10080E0D, 0x09DC0F18, 0x0D1204E4);
	r5 = D(r5, s0_0_1, 0xFFF8E7EB, 0xCD1A18F8, 0x00DD0A0D, 0x09F2FB12);
	r0 = D(r0, s0_0_2, 0x15F9F7E3, 0x07FF0705, 0x36D80C03, 0x42D1F6B4);
	r1 = D(r1, s0_0_2, 0x0EF40DF5, 0xFFF502FF, 0x14FB06FD, 0x04FC0003);
	r2 = D(r2, s0_0_2, 0x0DEE0CC4, 0xF70A13F2, 0x04FA03FD, 0x14F60E0C);
	r3 = D(r3, s0_0_2, 0x04EFFB0C, 0xFB020303, 0xFBF9FA07, 0x07F1F610);
	r4 = D(r4, s0_0_2, 0x060B0601, 0x0CFDF1FF, 0x0C02F8E1, 0x130D03E1);
	r5 = D(r5, s0_0_2, 0x07FE0306, 0xFA1D1109, 0x14F9FDEA, 0xF210040A);
	r0 = D(r0, s0_1_0, 0x0D0302F0, 0x0B001F03, 0x0FCAE11E, 0x1F0003E8);
	r1 = D(r1, s0_1_0, 0xF3DB0CFC, 0x040204FF, 0x16E2FEF4, 0xFA0402F4);
	r2 = D(r2, s0_1_0, 0x0561F3E2, 0xF62200EA, 0x000BFFFC, 0x06F11004);
	r3 = D(r3, s0_1_0, 0x090E090E, 0xFE13FC06, 0x18EFF7ED, 0xF4E20101);
	r4 = D(r4, s0_1_0, 0xF7EAED07, 0x10EBEABF, 0xFC1209EA, 0x04CE0BCC);
	r5 = D(r5, s0_1_0, 0x050EFE0A, 0xE1EDF2E4, 0x070A0304, 0x1202DE17);
	r0 = D(r0, s0_1_1, 0x1227191A, 0xFAEB010D, 0x20D61081, 0x02FBE50A);
	r1 = D(r1, s0_1_1, 0x05F2F705, 0x000300FD, 0x1DF508D9, 0x030204FC);
	r2 = D(r2, s0_1_1, 0xE8E71F17, 0x05060A0C, 0x060007FB, 0xFBD2150D);
	r3 = D(r3, s0_1_1, 0x0EFCFD02, 0xECFEFC06, 0xE3EA0BED, 0xF3DFFA10);
	r4 = D(r4, s0_1_1, 0x08FCFC03, 0x18FDFBEF, 0xFD0905E7, 0x1114F581);
	r5 = D(r5, s0_1_1, 0x130E02E7, 0xE41B25EF, 0x06011BEE, 0x0929E30C);
	r0 = D(r0, s0_1_2, 0x0822E808, 0x01FF0B03, 0x2781F8D1, 0x24EAE3ED);
	r1 = D(r1, s0_1_2, 0xF4EC0102, 0xFBFEFD09, 0x0D060DF9, 0x00FF02FE);
	r2 = D(r2, s0_1_2, 0x39CC32F3, 0x0EEE0907, 0x010303FE, 0x0D0717F6);
	r3 = D(r3, s0_1_2, 0xF50C12F7, 0x01F0F906, 0xF703FD0D, 0x0906F6FF);
	r4 = D(r4, s0_1_2, 0x0A0A03F5, 0x000901F4, 0x04F1FB09, 0xF1F320ED);
	r5 = D(r5, s0_1_2, 0xF9FFFAE5, 0xFA01F108, 0x070A0706, 0x15180108);
	r0 = D(r0, s0_2_0, 0x09FDF00D, 0x03F6F005, 0x15F01407, 0x1AF60AF8);
	r1 = D(r1, s0_2_0, 0xF7D816F6, 0x04FB00FC, 0x09FE04F6, 0x06FF0BF7);
	r2 = D(r2, s0_2_0, 0x0CA9FBD6, 0x0300E917, 0x040102F9, 0xFCEEEF02);
	r3 = D(r3, s0_2_0, 0xF0F8FD08, 0x03FAF4FE, 0x0109FA04, 0x0E1701F8);
	r4 = D(r4, s0_2_0, 0x0AFB0200, 0x06EE01FF, 0xF7FD0CF9, 0xEAD9FDEB);
	r5 = D(r5, s0_2_0, 0x151F08FA, 0xFA1A1201, 0xFEED1008, 0x0AF4F20E);
	r0 = D(r0, s0_2_1, 0x171EF4FE, 0xFDE6E30B, 0x2DD2F501, 0x12080DF0);
	r1 = D(r1, s0_2_1, 0xEA01EA10, 0xFBFF0003, 0x0802EA01, 0xFFF40106);
	r2 = D(r2, s0_2_1, 0x19EF0CFF, 0xFEFBD3FC, 0xFA030103, 0x0AEC0FF9);
	r3 = D(r3, s0_2_1, 0xFA01F808, 0x00F7F606, 0x00160B00, 0x0E1906EC);
	r4 = D(r4, s0_2_1, 0xFA1211F4, 0x14FA04F6, 0x00F323EF, 0xF52100F3);
	r5 = D(r5, s0_2_1, 0xF80CEFF2, 0x0A12060A, 0xF8010E03, 0x0D240100);
	r0 = D(r0, s0_2_2, 0xF40E0C0B, 0x060F06F7, 0x07E40814, 0x0CFC07FC);
	r1 = D(r1, s0_2_2, 0x06E6FE01, 0x03F701FF, 0x02F809F9, 0x02FE0201);
	r2 = D(r2, s0_2_2, 0x2381E90D, 0x03FBF6F2, 0x030003FF, 0x04FC1403);
	r3 = D(r3, s0_2_2, 0x0AF8FC09, 0xFD07F4FE, 0xFCFC00FB, 0xFB110805);
	r4 = D(r4, s0_2_2, 0xFEF9FC08, 0x01FEF907, 0x090310FD, 0x00F81C01);
	r5 = D(r5, s0_2_2, 0x07FDEF01, 0x08F6E315, 0x04F4F909, 0xFF1C0A07);
	r0 = D(r0, s1_0_0, 0x09E4FDF5, 0x07010302, 0xF8120AF5, 0x060205FD);
	r1 = D(r1, s1_0_0, 0xFAFF00F1, 0x03FD0301, 0x28050B0C, 0xFC0101FD);
	r2 = D(r2, s1_0_0, 0xE6FD02C2, 0xFEF504F1, 0x02FCFCFE, 0x1206F40D);
	r3 = D(r3, s1_0_0, 0xFB14FD03, 0xFEFE0501, 0xF5FDFEFF, 0x020508FE);
	r4 = D(r4, s1_0_0, 0x030D0E06, 0x02170107, 0x1AF6F3F1, 0xF000EEE9);
	r5 = D(r5, s1_0_0, 0x07050405, 0x22FEFA02, 0x04FFFA0E, 0xE5050602);
	r0 = D(r0, s1_0_1, 0x2CFC07FE, 0x0000FB00, 0xED050DF2, 0xDFFA221F);
	r1 = D(r1, s1_0_1, 0xF208F1F3, 0xFB04FE00, 0x09FC0E06, 0x0000FF00);
	r2 = D(r2, s1_0_1, 0x080CE6EA, 0xFCF8F6EF, 0xF3FBFE03, 0x07EEF2F8);
	r3 = D(r3, s1_0_1, 0x0318F9F4, 0x04FE08FE, 0x0404FCFA, 0x14F80AF7);
	r4 = D(r4, s1_0_1, 0x04FE040E, 0xEE0CFAEE, 0x250901FD, 0x08EEF900);
	r5 = D(r5, s1_0_1, 0x1307E3EC, 0x04110F1F, 0xF0112117, 0xD808FA05);
	r0 = D(r0, s1_0_2, 0x270DF707, 0x040307FA, 0xB7FC0302, 0x81FE0506);
	r1 = D(r1, s1_0_2, 0xF603FDFE, 0x02040602, 0x00F3FA13, 0xFD00FFFF);
	r2 = D(r2, s1_0_2, 0x2300EB0B, 0x02FAEAF7, 0x02FFFC03, 0x0D0CF9FC);
	r3 = D(r3, s1_0_2, 0x0706F2FD, 0xE70C0A05, 0xEEFE0100, 0xF60D1511);
	r4 = D(r4, s1_0_2, 0x1EFF0614, 0x19F1FC00, 0xE9FBEEFD, 0x0FFDE1FF);
	r5 = D(r5, s1_0_2, 0x190FFDE7, 0x02030FD9, 0xF0F80615, 0xA30F0D04);
	r0 = D(r0, s1_1_0, 0x0D0E0335, 0xFEF8010D, 0x09D0EDF1, 0x05F8E5F4);
	r1 = D(r1, s1_1_0, 0xF1FEF5F2, 0x01FC0606, 0x06051801, 0xFE0E0102);
	r2 = D(r2, s1_1_0, 0xF7E0C8FC, 0xFF08FC0D, 0x040D0706, 0xFE160C05);
	r3 = D(r3, s1_1_0, 0xF0130902, 0x001011F9, 0xEDFAFA0A, 0x16F700FA);
	r4 = D(r4, s1_1_0, 0x1109FFEE, 0x06F50B0B, 0xFC06EDFC, 0x0E20DC11);
	r5 = D(r5, s1_1_0, 0xDC05F4F4, 0xFF020B2F, 0x0407F904, 0xF00904FF);
	r0 = D(r0, s1_1_1, 0xD9F0FDF9, 0x47FE1509, 0xD9D44110, 0x1F042BF1);
	r1 = D(r1, s1_1_1, 0xC10AE307, 0xFBFFE904, 0x0B15E7E1, 0xFFE400FF);
	r2 = D(r2, s1_1_1, 0xC3AED60D, 0x1807FD04, 0x03F60503, 0xF90900FA);
	r3 = D(r3, s1_1_1, 0xBEDFC500, 0xF3FDEE06, 0xD8FAD417, 0x10031006);
	r4 = D(r4, s1_1_1, 0xF8FAEF08, 0xA607DFF8, 0x0DEBDC05, 0xF001CC0D);
	r5 = D(r5, s1_1_1, 0xF6EBC2DF, 0xDD10ECE3, 0x09091C0E, 0xE7181516);
	r0 = D(r0, s1_1_2, 0xE803DE0B, 0x050A1A0B, 0xD9B5E5F2, 0x07150DFB);
	r1 = D(r1, s1_1_2, 0xF9090A09, 0x02051200, 0x0BECF0F4, 0x0403FEFF);
	r2 = D(r2, s1_1_2, 0x25D1FCF7, 0xB50CF6FF, 0xF9FFFFFF, 0xFE0A0E03);
	r3 = D(r3, s1_1_2, 0xF5F8EE1B, 0xEC0909FC, 0x09F8F6E5, 0xF7050F07);
	r4 = D(r4, s1_1_2, 0x04EA0408, 0xD3FEE408, 0x2403F8FB, 0x1EF6C710);
	r5 = D(r5, s1_1_2, 0xEEF3E4E9, 0xE8CFFBFB, 0x0906FB07, 0xD3081A0C);
	r0 = D(r0, s1_2_0, 0xF8F108F5, 0x060A0AFE, 0x1C05F5F7, 0x0401F303);
	r1 = D(r1, s1_2_0, 0xFFEAE7F6, 0x00FBFE02, 0x0AFEF80D, 0x00FBFCFE);
	r2 = D(r2, s1_2_0, 0xECFBFA0D, 0x11E90DFB, 0xFDFBFCFD, 0x02FEFC06);
	r3 = D(r3, s1_2_0, 0x1405EFE8, 0xFF0500FC, 0xE1DFF5FA, 0xFDF80307);
	r4 = D(r4, s1_2_0, 0x0C09FE03, 0x08F30F07, 0x0AE0F50E, 0x042DC81B);
	r5 = D(r5, s1_2_0, 0xFFF503FF, 0xFAD8130D, 0x150F04FD, 0x0411EAF7);
	r0 = D(r0, s1_2_1, 0x0CF31906, 0x030B160A, 0xFA1BFA0F, 0x12E3F20A);
	r1 = D(r1, s1_2_1, 0xEEE4F80F, 0xFC0003F9, 0x05F4F810, 0xF7F30602);
	r2 = D(r2, s1_2_1, 0xEAE31917, 0x34CC0EEB, 0xFEF80706, 0x06FD0410);
	r3 = D(r3, s1_2_1, 0xFE11E6EE, 0x03F80EF6, 0xE906FB01, 0xDDE30911);
	r4 = D(r4, s1_2_1, 0x060BF909, 0x091FE0FF, 0x1013E718, 0xF6E7D123);
	r5 = D(r5, s1_2_1, 0x0A0EC4F9, 0xF518EFC8, 0xE23FFEF3, 0x0D04F407);
	r0 = D(r0, s1_2_2, 0xEF080625, 0xFA0AFB0B, 0xFEFCE338, 0xFDF0D12C);
	r1 = D(r1, s1_2_2, 0x0503091A, 0x02FD0401, 0xFAFAEA0E, 0x010E01FD);
	r2 = D(r2, s1_2_2, 0xE02B2F23, 0x0502F716, 0xFF07FFFE, 0xEEEC060E);
	r3 = D(r3, s1_2_2, 0xF8070301, 0x06FB02FA, 0x04EFFEF9, 0xE1FD01F9);
	r4 = D(r4, s1_2_2, 0xFD0206FD, 0xDDFEF0FC, 0x0FE90B03, 0x02EFFC16);
	r5 = D(r5, s1_2_2, 0xEC06EC00, 0xD102190D, 0x04011804, 0xEEE9EC0B);
	s0_0_0 = G[2][xy.y+0][xy.x+0]; s0_0_1 = G[2][xy.y+0][xy.x+1];
	s0_0_2 = G[2][xy.y+0][xy.x+2]; s0_1_0 = G[2][xy.y+1][xy.x+0];
	s0_1_1 = G[2][xy.y+1][xy.x+1]; s0_1_2 = G[2][xy.y+1][xy.x+2];
	s0_2_0 = G[2][xy.y+2][xy.x+0]; s0_2_1 = G[2][xy.y+2][xy.x+1];
	s0_2_2 = G[2][xy.y+2][xy.x+2]; s1_0_0 = G[3][xy.y+0][xy.x+0];
	s1_0_1 = G[3][xy.y+0][xy.x+1]; s1_0_2 = G[3][xy.y+0][xy.x+2];
	s1_1_0 = G[3][xy.y+1][xy.x+0]; s1_1_1 = G[3][xy.y+1][xy.x+1];
	s1_1_2 = G[3][xy.y+1][xy.x+2]; s1_2_0 = G[3][xy.y+2][xy.x+0];
	s1_2_1 = G[3][xy.y+2][xy.x+1]; s1_2_2 = G[3][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0x3AF514EB, 0xECFBFC08, 0xD416E602, 0x9F02D503);
	r1 = D(r1, s0_0_0, 0xE90AF4F7, 0xFFF501FD, 0x12F1F7E7, 0xFCF50206);
	r2 = D(r2, s0_0_0, 0x3507ED02, 0xF4F503F3, 0x09F90CFF, 0x39E7DF03);
	r3 = D(r3, s0_0_0, 0xFF0BFA11, 0x0B00020A, 0x1300F30B, 0x14FCE3F3);
	r4 = D(r4, s0_0_0, 0xF009FFFF, 0x00F7E605, 0x0D08F400, 0x0C2217E8);
	r5 = D(r5, s0_0_0, 0xD3020107, 0xC4FADD14, 0x23FEFB00, 0xDCF3DB0F);
	r0 = D(r0, s0_0_1, 0x34EEF7F6, 0x0BFAFB06, 0x14011CF5, 0xB4B928EF);
	r1 = D(r1, s0_0_1, 0x0407030E, 0x06F4F7F0, 0x0FD914EF, 0x050E0506);
	r2 = D(r2, s0_0_1, 0xF80C1214, 0x01F60302, 0x0D04030D, 0x03E7FF27);
	r3 = D(r3, s0_0_1, 0x0904080A, 0xFCF5F61B, 0x0A05F928, 0x0309F1DA);
	r4 = D(r4, s0_0_1, 0x091F0A09, 0xF9E311EE, 0x1EE8FFFC, 0x1E0CFFD4);
	r5 = D(r5, s0_0_1, 0xE60CF817, 0xC4FCD2DE, 0x0DE611BC, 0xF0FDF512);
	r0 = D(r0, s0_0_2, 0xFBE500B7, 0xF9F30A01, 0x16F10CEB, 0x0033F3E2);
	r1 = D(r1, s0_0_2, 0x02DE05F6, 0xF8F2010B, 0x0902F8ED, 0x01FD03F6);
	r2 = D(r2, s0_0_2, 0xEA0FFFD5, 0xEBEE0019, 0xFD0302FA, 0xFDDDF80B);
	r3 = D(r3, s0_0_2, 0x0BF00209, 0x01F7FF0B, 0xFDF60411, 0x0C01FDC2);
	r4 = D(r4, s0_0_2, 0x0014FEE6, 0x0E03F7DB, 0x05FE0323, 0x0BE90C14);
	r5 = D(r5, s0_0_2, 0x010FFACD, 0xFBDCFA06, 0x04F809FF, 0x0CEEFBFD);
	r0 = D(r0, s0_1_0, 0xBB0D0CFE, 0x0BF3FC05, 0xE6F3DCE4, 0xFF08DB0D);
	r1 = D(r1, s0_1_0, 0x0115FBF3, 0x070303FC, 0x22FBF801, 0xDF01F9F9);
	r2 = D(r2, s0_1_0, 0xAB02FEEC, 0x0006090D, 0xFB030902, 0x1500E820);
	r3 = D(r3, s0_1_0, 0xF518091E, 0xF2FDEF12, 0xE3FBE5FE, 0x0DF0FE04);
	r4 = D(r4, s0_1_0, 0x23FD17F4, 0x1DF90B09, 0x38170810, 0xF72301E1);
	r5 = D(r5, s0_1_0, 0x2FF6F8EC, 0x1FF8EEF6, 0x0A010017, 0xF307F8F6);
	r0 = D(r0, s0_1_1, 0x31001004, 0x080F0ED5, 0xFB818173, 0xDBF7D30B);
	r1 = D(r1, s0_1_1, 0x1A0D01EF, 0x0207FE1F, 0x0EFB0BEB, 0xFB180437);
	r2 = D(r2, s0_1_1, 0xFF22F802, 0x0B26FBEF, 0x040502F1, 0x1503F4D8);
	r3 = D(r3, s0_1_1, 0xEBF6FCA5, 0x0CFCF7D2, 0x06BCF8DC, 0xF9E60409);
	r4 = D(r4, s0_1_1, 0x07E7F539, 0xF2F80438, 0x04BC181B, 0x1C1F04DD);
	r5 = D(r5, s0_1_1, 0xEE06EC2D, 0x08F6E7D6, 0xFF96052E, 0xA1E5D8D1);
	r0 = D(r0, s0_1_2, 0xFFB620FB, 0xFCE904F6, 0x0AFF220B, 0x05EB1E20);
	r1 = D(r1, s0_1_2, 0xF2030BE3, 0x05070307, 0x00F60523, 0xFE02FFFE);
	r2 = D(r2, s0_1_2, 0xFAB7FD25, 0x09FDF21A, 0x01FE010B, 0x10D7FD12);
	r3 = D(r3, s0_1_2, 0xFA01FC22, 0xFD00F9FE, 0x08F6F10E, 0x03F50E15);
	r4 = D(r4, s0_1_2, 0x03F10607, 0x06EA05EF, 0x0408FBF8, 0x00F20624);
	r5 = D(r5, s0_1_2, 0xF12605C0, 0x07EAF826, 0x08F0FDF7, 0x13F6F0DC);
	r0 = D(r0, s0_2_0, 0x16FC0BFB, 0xF0FBEA07, 0x3510C616, 0x10FDFC03);
	r1 = D(r1, s0_2_0, 0xEF0900FC, 0xFF0003FD, 0xF5F7000A, 0xEF000705);
	r2 = D(r2, s0_2_0, 0x18D5121D, 0xE9FE01E9, 0xEFFC0900, 0x26FAF0F5);
	r3 = D(r3, s0_2_0, 0xF80A0303, 0xF100F700, 0x19040204, 0x150F1210);
	r4 = D(r4, s0_2_0, 0x0D001808, 0xE0FD0AF2, 0x3108FFE7, 0xEA0CF801);
	r5 = D(r5, s0_2_0, 0x020B0903, 0xD8E4E6FC, 0x4410E9FF, 0xD208E60E);
	r0 = D(r0, s0_2_1, 0x0407D8F1, 0x23FBF9E9, 0x0EFAEAEC, 0xBA04FA25);
	r1 = D(r1, s0_2_1, 0x180813EA, 0xF9000302, 0x0E0C010D, 0x080BFB08);
	r2 = D(r2, s0_2_1, 0xDCF20F53, 0xE904F2D1, 0x0105FE00, 0x050BE5E1);
	r3 = D(r3, s0_2_1, 0x0D0A06FA, 0x0808F4F3, 0xCF07F734, 0xFFFD1313);
	r4 = D(r4, s0_2_1, 0x2E051F01, 0xF90905E6, 0x0DF90C11, 0x01FD0B10);
	r5 = D(r5, s0_2_1, 0xF6F41005, 0xD10F0C15, 0x15E716FA, 0xF7E9F4E8);
	r0 = D(r0, s0_2_2, 0x06F2E335, 0x0CF403F5, 0x05F6F81B, 0x08F7DC2B);
	r1 = D(r1, s0_2_2, 0xFD07F910, 0x040402FD, 0xF402FF10, 0xFFF80502);
	r2 = D(r2, s0_2_2, 0xF320E913, 0x0619F1F7, 0xFEFC0305, 0x08EAF01B);
	r3 = D(r3, s0_2_2, 0xFA06FAF6, 0x080AF1FE, 0x0804FBFF, 0x05FD0046);
	r4 = D(r4, s0_2_2, 0xF9060A0B, 0xFFFBF80A, 0xF3EA06FB, 0xE6F7F918);
	r5 = D(r5, s0_2_2, 0x001605C8, 0x0216F6E2, 0x08FC01F5, 0xEAF6F71F);
	r0 = D(r0, s1_0_0, 0x050D0506, 0x0603FDFA, 0x0110C3F5, 0x0308E90F);
	r1 = D(r1, s1_0_0, 0x03F8E40C, 0x00040000, 0xE915F0E6, 0xFF000006);
	r2 = D(r2, s1_0_0, 0x19FE0316, 0x08FEFA07, 0xFAFD04F6, 0x0509D2BF);
	r3 = D(r3, s1_0_0, 0xFBF4F306, 0x02F401F9, 0x06060602, 0x000500FB);
	r4 = D(r4, s1_0_0, 0xFDFD0206, 0x0300FDF4, 0x02FEFEEC, 0xF30E08FD);
	r5 = D(r5, s1_0_0, 0xF2120105, 0xFB01DDE8, 0x060A02FE, 0xF9F8F728);
	r0 = D(r0, s1_0_1, 0xFF020619, 0x05F90505, 0xFAFB0981, 0xE61114F4);
	r1 = D(r1, s1_0_1, 0x240EFB15, 0x0911FE40, 0xB5200501, 0x10FBFF0B);
	r2 = D(r2, s1_0_1, 0xEAFE1A21, 0x03F9F60F, 0x11F804FE, 0x1CF80FEC);
	r3 = D(r3, s1_0_1, 0x1EF80D10, 0x19FA04FB, 0xE90AF934, 0x02FC00C4);
	r4 = D(r4, s1_0_1, 0xE90A0DDB, 0xFEFBFFF9, 0x03FED9FB, 0xF5130F1A);
	r5 = D(r5, s1_0_1, 0x090C0A1B, 0xF2FCE93F, 0xEA0FFAF3, 0xEAF0110D);
	r0 = D(r0, s1_0_2, 0x14EEE3CF, 0x0CFCFA01, 0x81F8E003, 0xDC29C781);
	r1 = D(r1, s1_0_2, 0x0AFAE309, 0x2FFC00F8, 0xFF0E04FC, 0xFFFEFF01);
	r2 = D(r2, s1_0_2, 0x0B1EFEF5, 0xF9080E13, 0x03FF03FB, 0x0FFFFC0D);
	r3 = D(r3, s1_0_2, 0x16F7F605, 0x00FFFE0E, 0x11080FF5, 0xF3FA00EF);
	r4 = D(r4, s1_0_2, 0xED0800F2, 0xE803FFEF, 0x15FBFEF0, 0x20FEEB04);
	r5 = D(r5, s1_0_2, 0xFA1004EE, 0xFBEE16F3, 0x1DF807E7, 0xA8101616);
	r0 = D(r0, s1_1_0, 0xF00D270A, 0xF105FCFD, 0x070B04F5, 0x0B0CE002);
	r1 = D(r1, s1_1_0, 0x120E080B, 0x010204FD, 0x050802E8, 0x0AFEFB0D);
	r2 = D(r2, s1_1_0, 0x14FC08EC, 0x09FC03FA, 0x06FBFFF5, 0x04F81FD5);
	r3 = D(r3, s1_1_0, 0x0CFDF3FD, 0xF3F3FFE3, 0x0DFDF912, 0xFF0403FD);
	r4 = D(r4, s1_1_0, 0xFA010803, 0x080AFDF5, 0xFDF71DED, 0xFC0D0EF0);
	r5 = D(r5, s1_1_0, 0x0BFAFC33, 0xFF16F6F2, 0xF5FE07D7, 0xF20BFC16);
	r0 = D(r0, s1_1_1, 0xC1FADF4A, 0xDF0810B4, 0xD215D3EB, 0x0428210C);
	r1 = D(r1, s1_1_1, 0x12E4F6F3, 0x0DF80405, 0x0D1A22E7, 0xF3F6FCE9);
	r2 = D(r2, s1_1_1, 0xFCBAD914, 0xEFF0FEF7, 0x3922FFFD, 0x131BE6ED);
	r3 = D(r3, s1_1_1, 0x2FD4ED34, 0x3CFC0118, 0x36090B0C, 0xF314FAF9);
	r4 = D(r4, s1_1_1, 0x8101F8BD, 0xCD02E6F2, 0x26F7EC1E, 0xEC0CF9F5);
	r5 = D(r5, s1_1_1, 0xD5EB0500, 0x09010E0A, 0xE1EAF2FF, 0xC81B1D0A);
	r0 = D(r0, s1_1_2, 0x030ADCE0, 0xF602F8FA, 0x33F61ED8, 0xD1FA1FFA);
	r1 = D(r1, s1_1_2, 0x29FCE502, 0x020706FA, 0xF6FA1008, 0xF6060201);
	r2 = D(r2, s1_1_2, 0xE2E10610, 0xF8F81C12, 0x00FBFF06, 0x08ECEF13);
	r3 = D(r3, s1_1_2, 0x09F7E918, 0x13FF07F2, 0x1B1E06FB, 0x2DF1FF02);
	r4 = D(r4, s1_1_2, 0x01EFFDE3, 0xEC05E3FB, 0x05061BEF, 0xD7130E2B);
	r5 = D(r5, s1_1_2, 0xDA21F00B, 0xE3F428FE, 0x020504E0, 0xE206F912);
	r0 = D(r0, s1_2_0, 0x050A0FFD, 0x000910F3, 0xF1F41EE9, 0x0DF51CFA);
	r1 = D(r1, s1_2_0, 0x0FF5EC15, 0x02FE0003, 0xFE0C1CFF, 0x04040403);
	r2 = D(r2, s1_2_0, 0x0DFFF1E6, 0xF1FD1FFE, 0x01FEFD04, 0x00023BF1);
	r3 = D(r3, s1_2_0, 0xFEFBED01, 0x0404F5FC, 0x08FDDE1F, 0x01F9FE0D);
	r4 = D(r4, s1_2_0, 0xFC02F703, 0xF8070104, 0x0D0CDFF5, 0x04032D00);
	r5 = D(r5, s1_2_0, 0x0B0015E5, 0xFB0709FC, 0xFE03C9DC, 0x05FEEB0F);
	r0 = D(r0, s1_2_1, 0x0507DF02, 0xF82751D1, 0x1D0F66D6, 0xF8F60418);
	r1 = D(r1, s1_2_1, 0xF90BF915, 0xFF0409FF, 0x0508FFFD, 0xF60104FE);
	r2 = D(r2, s1_2_1, 0x19F6C83C, 0xDF100EFD, 0x03040A00, 0xFC11F9F3);
	r3 = D(r3, s1_2_1, 0x0609F1FD, 0x0004F7FD, 0xE2F1BD13, 0x1FEAD828);
	r4 = D(r4, s1_2_1, 0xF5100AFE, 0xFD0AFDF6, 0x00F2C50A, 0xEFFEF90E);
	r5 = D(r5, s1_2_1, 0x14010216, 0x14F0D514, 0x050AFCF8, 0xE50CF604);
	r0 = D(r0, s1_2_2, 0x07FB1812, 0x09FD0DFA, 0x1CFE07FF, 0xF1F90B0E);
	r1 = D(r1, s1_2_2, 0xF5FB0607, 0xFEFD0100, 0xF6050A08, 0xFCFFFD01);
	r2 = D(r2, s1_2_2, 0xF627FDFA, 0xD1F31508, 0x03FEFD00, 0xFBE8F91A);
	r3 = D(r3, s1_2_2, 0x09F3F50D, 0x050013F9, 0xE60DDDFF, 0x12F2F41C);
	r4 = D(r4, s1_2_2, 0xF30D0DF8, 0x0306FA00, 0xFB08E8FD, 0xE5F5DE13);
	r5 = D(r5, s1_2_2, 0x0C21FFF5, 0xFC02ECFC, 0x0204F5F5, 0xDC05120C);
	s0_0_0 = G[4][xy.y+0][xy.x+0]; s0_0_1 = G[4][xy.y+0][xy.x+1];
	s0_0_2 = G[4][xy.y+0][xy.x+2]; s0_1_0 = G[4][xy.y+1][xy.x+0];
	s0_1_1 = G[4][xy.y+1][xy.x+1]; s0_1_2 = G[4][xy.y+1][xy.x+2];
	s0_2_0 = G[4][xy.y+2][xy.x+0]; s0_2_1 = G[4][xy.y+2][xy.x+1];
	s0_2_2 = G[4][xy.y+2][xy.x+2]; s1_0_0 = G[5][xy.y+0][xy.x+0];
	s1_0_1 = G[5][xy.y+0][xy.x+1]; s1_0_2 = G[5][xy.y+0][xy.x+2];
	s1_1_0 = G[5][xy.y+1][xy.x+0]; s1_1_1 = G[5][xy.y+1][xy.x+1];
	s1_1_2 = G[5][xy.y+1][xy.x+2]; s1_2_0 = G[5][xy.y+2][xy.x+0];
	s1_2_1 = G[5][xy.y+2][xy.x+1]; s1_2_2 = G[5][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0xF3F4FB04, 0x05070004, 0x24CD1BF8, 0x14F7E6FD);
	r1 = D(r1, s0_0_0, 0x030DF20B, 0x03160001, 0xFA000E02, 0x03F8FF01);
	r2 = D(r2, s0_0_0, 0x20E0D8EE, 0xFCF0FFFF, 0xFEF0FCFF, 0x08150B13);
	r3 = D(r3, s0_0_0, 0xFF1C0A09, 0x040AED04, 0x08E9FBF3, 0xFB0DDEFC);
	r4 = D(r4, s0_0_0, 0x0B0105E5, 0x110C100A, 0xFEEFE60A, 0xFFF704FB);
	r5 = D(r5, s0_0_0, 0x01F51F09, 0x080FFBF5, 0xFD1312F7, 0x10FD0E0B);
	r0 = D(r0, s0_0_1, 0xEBD9EB10, 0x0005FB02, 0x10F4E7F2, 0xF8A0FD01);
	r1 = D(r1, s0_0_1, 0xFE0CFF0D, 0x0203FB04, 0xFBF5F9F8, 0x02F60701);
	r2 = D(r2, s0_0_1, 0x14ED32FF, 0x00040705, 0x03F3F101, 0xFB000A1A);
	r3 = D(r3, s0_0_1, 0x010DFE0C, 0x02FEE400, 0x1EF7FB0B, 0xFBFDC3F8);
	r4 = D(r4, s0_0_1, 0x10FDB2D7, 0xFAFF0F0D, 0xF6DA23FC, 0x03EAEE08);
	r5 = D(r5, s0_0_1, 0x100228FD, 0x0805160F, 0xF3F011FE, 0x131200EF);
	r0 = D(r0, s0_0_2, 0xDFFFE2F6, 0xFEFD0505, 0x0DF21500, 0xF4F9C6E8);
	r1 = D(r1, s0_0_2, 0x11043212, 0xFE060F02, 0xFFF8DAFA, 0xFE00FAFF);
	r2 = D(r2, s0_0_2, 0xF3E1EBD7, 0x03FEFFFF, 0x00FF01FE, 0xF7F5F6F5);
	r3 = D(r3, s0_0_2, 0x0B0415FC, 0xFE000502, 0x0EF901FA, 0xEBF8FAE6);
	r4 = D(r4, s0_0_2, 0x0FFEFFE7, 0x07F2FAF7, 0xF6FBF6F9, 0x09000910);
	r5 = D(r5, s0_0_2, 0x04F2F5FC, 0x2004F424, 0x02021007, 0x0C0CF006);
	r0 = D(r0, s0_1_0, 0x0B19201C, 0xFF17170D, 0x1D81F7E9, 0x0DF7370C);
	r1 = D(r1, s0_1_0, 0x04F481FA, 0x01FFFD07, 0xFB111BF5, 0x053F0509);
	r2 = D(r2, s0_1_0, 0xF4103E2E, 0xF5100F0A, 0x01FFED10, 0x1609EA11);
	r3 = D(r3, s0_1_0, 0xFF3216F9, 0xFEFAECFD, 0x13D2060A, 0x0AF9EE00);
	r4 = D(r4, s0_1_0, 0x08F002DE, 0xFE242726, 0xF0FCF306, 0xFCB2D5E9);
	r5 = D(r5, s0_1_0, 0xFCF60A13, 0x08253B05, 0xFFFE02E2, 0x1DE8EAEF);
	r0 = D(r0, s0_1_1, 0xEC01D330, 0xF7017F04, 0x39F21C40, 0xEF81FFF8);
	r1 = D(r1, s0_1_1, 0x1CF281E4, 0x060101F1, 0xF5F4FCE7, 0x0003F906);
	r2 = D(r2, s0_1_1, 0xF20181F0, 0xF01CF911, 0x01F90500, 0xEAF533FC);
	r3 = D(r3, s0_1_1, 0x000CA1F3, 0xFDFA1704, 0x110AB0FC, 0x0118DCFF);
	r4 = D(r4, s0_1_1, 0x0AD581D8, 0xFC16AD1B, 0xEFFB0D08, 0x0E06D903);
	r5 = D(r5, s0_1_1, 0x0500B5FD, 0xEC02DC07, 0xF90617F3, 0xF5D81003);
	r0 = D(r0, s0_1_2, 0x1F2238FC, 0x04091C0D, 0x040FF80B, 0x24EF0EDE);
	r1 = D(r1, s0_1_2, 0x140F3006, 0x04FB0E03, 0x000F0B09, 0x0103FFFF);
	r2 = D(r2, s0_1_2, 0x0A21B621, 0x0D0AF30F, 0xFE05F907, 0xF9FEFB12);
	r3 = D(r3, s0_1_2, 0xFE10F705, 0x0300F9FC, 0x05ED08F7, 0x020508F0);
	r4 = D(r4, s0_1_2, 0x1614BCF7, 0xFA10E401, 0xF9FF0FE5, 0x07152810);
	r5 = D(r5, s0_1_2, 0xED070DF7, 0x1102ED0F, 0x0D0801F9, 0x16FC1C0E);
	r0 = D(r0, s0_2_0, 0xF80AEA00, 0xFC210005, 0x0402071B, 0x0DFCE4FB);
	r1 = D(r1, s0_2_0, 0x0713F30A, 0x01040300, 0xFEF6F9FF, 0x0009FBFD);
	r2 = D(r2, s0_2_0, 0xDEDFF911, 0xFEDBF106, 0x0401FB02, 0xF3F805F4);
	r3 = D(r3, s0_2_0, 0xFF001DFD, 0x00FE06FC, 0x16E0D0E7, 0xF70F0108);
	r4 = D(r4, s0_2_0, 0xFE041C0D, 0x17FE1205, 0xF8F81906, 0x01D8CCE0);
	r5 = D(r5, s0_2_0, 0x04E7F40C, 0x0EFE112D, 0xF20BE2E9, 0x09000B06);
	r0 = D(r0, s0_2_1, 0xF4032D35, 0xEEFF0FFD, 0x41FFEAAC, 0x0107FBFA);
	r1 = D(r1, s0_2_1, 0xFD03C910, 0x05030305, 0xFFF5FCF3, 0x0300050A);
	r2 = D(r2, s0_2_1, 0xE0DB35FF, 0x02F3531C, 0x0102F902, 0xF0F102E9);
	r3 = D(r3, s0_2_1, 0xF6FEE3F5, 0x09FB0811, 0x0B0DF202, 0xFA091F21);
	r4 = D(r4, s0_2_1, 0xFAEF30F5, 0xFAF9A6E6, 0xF617DBF6, 0x08F0DDE0);
	r5 = D(r5, s0_2_1, 0x07EB0503, 0x30FFDAEF, 0xFC20CBF1, 0xF7E4F5F0);
	r0 = D(r0, s0_2_2, 0x11F70602, 0xFD000AF9, 0x2906F3F7, 0x1F0EE9DE);
	r1 = D(r1, s0_2_2, 0x04FE280D, 0xFFFF0600, 0x010AFF03, 0x04FDFCF8);
	r2 = D(r2, s0_2_2, 0xEDEF30EC, 0xF0F7F4F7, 0x01020200, 0x0508D6F9);
	r3 = D(r3, s0_2_2, 0x030507F9, 0x01FBFC00, 0xFDFCE6F9, 0x12020AF9);
	r4 = D(r4, s0_2_2, 0x0DF72904, 0x0207F510, 0xFC0211F7, 0x0A0D0216);
	r5 = D(r5, s0_2_2, 0x00ECEF09, 0x05F11106, 0x03F602F1, 0x1011F311);
	r0 = D(r0, s1_0_0, 0x01F6011C, 0xF4FF01FF, 0xD8F607F0, 0x0601F8D2);
	r1 = D(r1, s1_0_0, 0xF909F7F7, 0x02FD06F9, 0xF704F11E, 0xF2FE0100);
	r2 = D(r2, s1_0_0, 0xC30903EF, 0x0F040611, 0xFDFE0304, 0xF403F0D1);
	r3 = D(r3, s1_0_0, 0xFA050409, 0x02FE020B, 0xF8FBEAE6, 0x00F7F3FC);
	r4 = D(r4, s1_0_0, 0xF30407F9, 0xEEFC00DE, 0x02050213, 0x070701FA);
	r5 = D(r5, s1_0_0, 0xF2FF0A07, 0x0903FBBB, 0xD706FEE3, 0xFB02F9EF);
	r0 = D(r0, s1_0_1, 0x4209F60C, 0x0A07FDF2, 0x0FFDF8E1, 0xDB0A20C5);
	r1 = D(r1, s1_0_1, 0xF907F4F4, 0xF00207FB, 0xC5F80E01, 0x040004F8);
	r2 = D(r2, s1_0_1, 0x2CF801E0, 0x0E020815, 0x2F01FE03, 0xE026BF33);
	r3 = D(r3, s1_0_1, 0xFA0BFE00, 0x080100EC, 0xE501F5E7, 0x09FDF0D5);
	r4 = D(r4, s1_0_1, 0xECEE0EFB, 0xF50CFBE3, 0xF00DEC16, 0xFAFFFB25);
	r5 = D(r5, s1_0_1, 0xF303FFF3, 0xDAFDF221, 0xC501110A, 0xFFF1F2DC);
	r0 = D(r0, s1_0_2, 0xC4051030, 0xF905FE02, 0x0AFE001C, 0x25BFF48D);
	r1 = D(r1, s1_0_2, 0xFB11F10C, 0xE701FE04, 0x1DFE100B, 0x0D00FC04);
	r2 = D(r2, s1_0_2, 0xFFF501E8, 0xED0109F2, 0x0700FD00, 0xFAF718DE);
	r3 = D(r3, s1_0_2, 0xEF03FEF6, 0xF502F304, 0x15F804D5, 0xF7EF112C);
	r4 = D(r4, s1_0_2, 0xFAFA0AFA, 0x090012FE, 0x040AFB09, 0x040DF9F6);
	r5 = D(r5, s1_0_2, 0x1F030410, 0x19F704AF, 0x0102FD0F, 0x0D0113E4);
	r0 = D(r0, s1_1_0, 0x0EFFFB02, 0xEC0B0600, 0x1804D9AA, 0xE816EF06);
	r1 = D(r1, s1_1_0, 0xF2F8EDEA, 0x01080603, 0xF0E700FA, 0x0202F5EB);
	r2 = D(r2, s1_1_0, 0xD612F102, 0x02FEF10C, 0xFFFB0208, 0xE901F702);
	r3 = D(r3, s1_1_0, 0xFA12F100, 0xFE091D0B, 0x0101F7FE, 0xF6EF0703);
	r4 = D(r4, s1_1_0, 0x0EFB05FF, 0x010208F8, 0x070B1B1C, 0x0AF2EEDE);
	r5 = D(r5, s1_1_0, 0xEB140510, 0xEF02FDEC, 0x210100F1, 0xFBFFFAB7);
	r0 = D(r0, s1_1_1, 0xFD4DD414, 0x0F0D0BDA, 0xC7B98198, 0x12DEE9E6);
	r1 = D(r1, s1_1_1, 0x1522DE1B, 0xF510FD00, 0x14FC0C13, 0x36FFEFFB);
	r2 = D(r2, s1_1_1, 0x301CBA2B, 0x3507DE17, 0xFE03EC11, 0x1626AB00);
	r3 = D(r3, s1_1_1, 0x0B1BD0FF, 0x171FD101, 0xEB13AC3C, 0xE4EFD3FD);
	r4 = D(r4, s1_1_1, 0x23FB5A26, 0xCA0F640A, 0xDFF9D70A, 0x0904F916);
	r5 = D(r5, s1_1_1, 0xF8191115, 0x050CBFEC, 0xEDDD0A17, 0x10F2F8FF);
	r0 = D(r0, s1_1_2, 0xE7FE09BF, 0xF90C0724, 0x28E8F0E7, 0x2DC9F2C7);
	r1 = D(r1, s1_1_2, 0x0C1308EE, 0xFE08FD06, 0x02FE0F17, 0x0B02FAFB);
	r2 = D(r2, s1_1_2, 0x2C17DA0B, 0x3209EBF7, 0x0205F80D, 0x07FC0011);
	r3 = D(r3, s1_1_2, 0xEF20EBF2, 0xF6FAFE04, 0x1D08F4E1, 0xEEDA11E0);
	r4 = D(r4, s1_1_2, 0xEF060FE3, 0xFCED1AEC, 0xF6F0FB1E, 0x082AE604);
	r5 = D(r5, s1_1_2, 0xFDEE17ED, 0xF30409E1, 0x0A0C10F4, 0x2F13EEC2);
	r0 = D(r0, s1_2_0, 0x04F50709, 0xF4FB0702, 0xE6F101F8, 0xF810F502);
	r1 = D(r1, s1_2_0, 0x0800D9F4, 0x0000FC01, 0xFB05FB04, 0xF5000305);
	r2 = D(r2, s1_2_0, 0x1405FA08, 0xEF070723, 0x0202FC05, 0x0003140B);
	r3 = D(r3, s1_2_0, 0x010FFEFE, 0xFF040BFE, 0xE701FBF8, 0xEF0B0602);
	r4 = D(r4, s1_2_0, 0xF90701EF, 0x05040B03, 0x1B05F5F4, 0xFDF0F4FE);
	r5 = D(r5, s1_2_0, 0x06060A16, 0x0104060E, 0x11FA00DA, 0xF8FCDCD5);
	r0 = D(r0, s1_2_1, 0x010301DD, 0x10D7FAE1, 0x15ABEBA7, 0xF319F3FE);
	r1 = D(r1, s1_2_1, 0xE609B7EE, 0x03FD02FB, 0xF8F20506, 0x030CFAF5);
	r2 = D(r2, s1_2_1, 0x911AEA27, 0xF7F0D1F5, 0x04090303, 0x2202FEF8);
	r3 = D(r3, s1_2_1, 0x0414FB16, 0xFC01F2FD, 0xFF471416, 0xF912F716);
	r4 = D(r4, s1_2_1, 0x040E06FC, 0x132C03FF, 0x00201E13, 0xFE0DE808);
	r5 = D(r5, s1_2_1, 0xF603F91F, 0xE8FA0D0F, 0x071BF8EC, 0x10FD07FA);
	r0 = D(r0, s1_2_2, 0xFDFBC7EE, 0x08F00A01, 0x06CE0501, 0xFD05E3DF);
	r1 = D(r1, s1_2_2, 0x131016D9, 0xFFFAFEFF, 0x0005FE12, 0xFFF9FD02);
	r2 = D(r2, s1_2_2, 0x0D08E9C4, 0x14E8ECEC, 0x02FBFC0A, 0xF1CDF704);
	r3 = D(r3, s1_2_2, 0x0F1AFFF6, 0xFE08FAFA, 0xFAEE0105, 0xF912E1FC);
	r4 = D(r4, s1_2_2, 0xFA1006E4, 0x09160EE2, 0xFB020411, 0xFDF2FF1C);
	r5 = D(r5, s1_2_2, 0x18F9011C, 0xFF010023, 0x080406ED, 0xFF1FFABE);
	f0 = vec4(r0) * 6.2000124e-05;
	f0 += vec4(-2.742e-02, -1.390e-02, 3.594e-02, 4.902e-02);
	f0 = clamp(f0, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(0, 0), f0);
	f1 = vec4(r1) * 6.2000124e-05;
	f1 += vec4(-6.791e-03, 1.128e-02, 4.167e-02, -5.956e-03);
	f1 = clamp(f1, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(1, 0), f1);
	f2 = vec4(r2) * 6.2000124e-05;
	f2 += vec4(-6.201e-03, -3.562e-02, 7.787e-03, -1.689e-02);
	f2 = clamp(f2, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(2, 0), f2);
	f3 = vec4(r3) * 6.2000124e-05;
	f3 += vec4(-4.494e-02, -1.923e-02, 4.503e-02, 1.679e-02);
	f3 = clamp(f3, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(0, 1), f3);
	f4 = vec4(r4) * 6.2000124e-05;
	f4 += vec4(-1.617e-02, 6.742e-03, 6.823e-03, 2.297e-02);
	f4 = clamp(f4, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(1, 1), f4);
	f5 = vec4(r5) * 6.2000124e-05;
	f5 += vec4(3.197e-02, -1.860e-02, 1.894e-02, 6.263e-03);
	f5 = clamp(f5, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(2, 1), f5);
}

//!DESC [CuNNy_4x24_DS_vk] -conv3
//!HOOK LUMA
//!COMPUTE 24 16 8 8
//!BIND conv2
//!BIND LUMA
//!SAVE conv3
//!WIDTH LUMA.w 3 *
//!HEIGHT LUMA.h 2 *
//!COMPONENTS 4
//!WHEN OUTPUT.w LUMA.w 1.200 * > OUTPUT.h LUMA.h 1.200 * > *
#extension GL_EXT_spirv_intrinsics : require
#define l0(x, y) (conv2_mul * texelFetch(conv2_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(0, 0), 0))
#define l1(x, y) (conv2_mul * texelFetch(conv2_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(1, 0), 0))
#define l2(x, y) (conv2_mul * texelFetch(conv2_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(2, 0), 0))
#define l3(x, y) (conv2_mul * texelFetch(conv2_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(0, 1), 0))
#define l4(x, y) (conv2_mul * texelFetch(conv2_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(1, 1), 0))
#define l5(x, y) (conv2_mul * texelFetch(conv2_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(2, 1), 0))
spirv_instruction (extensions = ["SPV_KHR_integer_dot_product"], capabilities = [6019, 6018], id = 4450)
int dp4(int a, int b, spirv_literal int fmt);
#define D(r, s, a, b, c, d) r + ivec4(dp4(s, a, 0), dp4(s, b, 0), dp4(s, c, 0), dp4(s, d, 0))
shared int G[6][10][10];
void hook() {
	ivec2 xy = ivec2(gl_LocalInvocationID.xy);
	ivec2 pos = ivec2(gl_WorkGroupID.xy) * ivec2(8, 8) + xy;
	ivec2 opos = pos * ivec2(3, 2);
	ivec2 sz = ivec2(LUMA_size) - ivec2(1);
	for (int y = 0; y < 10; y += 8) {
		int ay = xy.y + y;
		if (ay >= 10) break;
		for (int x = 0; x < 10; x += 8) {
			int ax = xy.x + x;
			if (ax >= 10) break;
			vec4 v0 = l0(x - 1, y - 1) * 1.0000000e+00;
			vec4 v1 = l1(x - 1, y - 1) * 1.0000000e+00;
			vec4 v2 = l2(x - 1, y - 1) * 1.0000000e+00;
			vec4 v3 = l3(x - 1, y - 1) * 1.0000000e+00;
			vec4 v4 = l4(x - 1, y - 1) * 1.0000000e+00;
			vec4 v5 = l5(x - 1, y - 1) * 1.0000000e+00;
			G[0][ay][ax] = int(packSnorm4x8(v0));
			G[1][ay][ax] = int(packSnorm4x8(v1));
			G[2][ay][ax] = int(packSnorm4x8(v2));
			G[3][ay][ax] = int(packSnorm4x8(v3));
			G[4][ay][ax] = int(packSnorm4x8(v4));
			G[5][ay][ax] = int(packSnorm4x8(v5));
		}
	}
	barrier();
	int s0_0_0, s0_0_1, s0_0_2, s0_1_0, s0_1_1, s0_1_2, s0_2_0, s0_2_1, s0_2_2, s1_0_0, s1_0_1, s1_0_2, s1_1_0, s1_1_1, s1_1_2, s1_2_0, s1_2_1, s1_2_2;
	ivec4 r0, r1, r2, r3, r4, r5;
	vec4 f0, f1, f2, f3, f4, f5;
	r0 = ivec4(0); r1 = ivec4(0); r2 = ivec4(0); r3 = ivec4(0); r4 = ivec4(0); r5 = ivec4(0);
	s0_0_0 = G[0][xy.y+0][xy.x+0]; s0_0_1 = G[0][xy.y+0][xy.x+1];
	s0_0_2 = G[0][xy.y+0][xy.x+2]; s0_1_0 = G[0][xy.y+1][xy.x+0];
	s0_1_1 = G[0][xy.y+1][xy.x+1]; s0_1_2 = G[0][xy.y+1][xy.x+2];
	s0_2_0 = G[0][xy.y+2][xy.x+0]; s0_2_1 = G[0][xy.y+2][xy.x+1];
	s0_2_2 = G[0][xy.y+2][xy.x+2]; s1_0_0 = G[1][xy.y+0][xy.x+0];
	s1_0_1 = G[1][xy.y+0][xy.x+1]; s1_0_2 = G[1][xy.y+0][xy.x+2];
	s1_1_0 = G[1][xy.y+1][xy.x+0]; s1_1_1 = G[1][xy.y+1][xy.x+1];
	s1_1_2 = G[1][xy.y+1][xy.x+2]; s1_2_0 = G[1][xy.y+2][xy.x+0];
	s1_2_1 = G[1][xy.y+2][xy.x+1]; s1_2_2 = G[1][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0x04F9FEF7, 0x0725F7F5, 0x0409FB00, 0xFFFDF6FB);
	r1 = D(r1, s0_0_0, 0xFB170BFD, 0xFF0BFEFF, 0x05000406, 0xF605FFFF);
	r2 = D(r2, s0_0_0, 0xFF0E00FF, 0xFDFA090D, 0x00EE0502, 0x03F70304);
	r3 = D(r3, s0_0_0, 0x0104FE00, 0x00F9FD06, 0xF4FB0C11, 0x0700FA07);
	r4 = D(r4, s0_0_0, 0xFD06080A, 0x0006F804, 0xFAFCF600, 0xFBF6F307);
	r5 = D(r5, s0_0_0, 0x34FB0408, 0xFC08F9FA, 0xF9F70304, 0x021104F7);
	r0 = D(r0, s0_0_1, 0x01F5FA02, 0x0B2FF60D, 0x0817FDFF, 0x00FD0205);
	r1 = D(r1, s0_0_1, 0x06102106, 0xFE050706, 0x01091507, 0x00F8000A);
	r2 = D(r2, s0_0_1, 0xFDFA0101, 0xF9090A03, 0xEEE80C05, 0x01E5CC04);
	r3 = D(r3, s0_0_1, 0x010701FE, 0xFBFAF604, 0x00FB02F7, 0xF8FDF70F);
	r4 = D(r4, s0_0_1, 0xFEF1FF02, 0x030E03FA, 0xF3FDF20B, 0xF8EFF7FD);
	r5 = D(r5, s0_0_1, 0x07C71719, 0xF806FD04, 0xEEEF15F9, 0xF913F907);
	r0 = D(r0, s0_0_2, 0x03FA02FE, 0x011AFD06, 0x06170301, 0xFDF401FC);
	r1 = D(r1, s0_0_2, 0xFB150701, 0x0404FD00, 0x02FFFF04, 0x00F6F604);
	r2 = D(r2, s0_0_2, 0xFAFB1106, 0x040B0900, 0xFCFC0303, 0xFBFE0D08);
	r3 = D(r3, s0_0_2, 0x0105FAFF, 0x03EC05FB, 0xFC071000, 0x01F203FD);
	r4 = D(r4, s0_0_2, 0xFCF9F601, 0x061301FB, 0xFBFB07FE, 0x01EF0A05);
	r5 = D(r5, s0_0_2, 0x060B2202, 0x00FD09F9, 0x02FD09FB, 0xFFF50CFE);
	r0 = D(r0, s0_1_0, 0x11F8F8F4, 0x053204F4, 0x030B03FC, 0xFFFCFFFB);
	r1 = D(r1, s0_1_0, 0x041A090D, 0xF7F40705, 0x0706040E, 0xF4EFFC0B);
	r2 = D(r2, s0_1_0, 0xF0FE08F1, 0xF8FB080D, 0xE7EAFB10, 0xE803D810);
	r3 = D(r3, s0_1_0, 0xFE080401, 0xF3F001FF, 0xEAF9F70B, 0xFBFE06FD);
	r4 = D(r4, s0_1_0, 0xF518FFFC, 0xFC0B04FF, 0x0006FD15, 0xECEFFBFD);
	r5 = D(r5, s0_1_0, 0xB00F0717, 0x06FDFE0A, 0xF5F00BFF, 0xF710FDFD);
	r0 = D(r0, s0_1_1, 0x1C15E300, 0x1729130D, 0x091908F9, 0xF9FAF611);
	r1 = D(r1, s0_1_1, 0x1CFF30FC, 0xFFE2F709, 0x0BF13906, 0xFFFCA612);
	r2 = D(r2, s0_1_1, 0x01E4EB0E, 0xF4F02401, 0xE2F8F604, 0xF0E1F217);
	r3 = D(r3, s0_1_1, 0x0411F3FD, 0xF5F9F801, 0xEA21C612, 0xEFE9060F);
	r4 = D(r4, s0_1_1, 0xF5E71A05, 0x041D03F8, 0xF009EE22, 0xFAF0CA11);
	r5 = D(r5, s0_1_1, 0xD8BFC213, 0xEAE52110, 0xE3F4DF0C, 0xF4F3090E);
	r0 = D(r0, s0_1_2, 0x02F60700, 0x0B21F5FE, 0x141B09F9, 0xD6E10508);
	r1 = D(r1, s0_1_2, 0x0B170403, 0xFCF2FA08, 0x0DFF0907, 0xE8F1F309);
	r2 = D(r2, s0_1_2, 0xF7E90901, 0x09080307, 0xFEF70502, 0xFAEC0E01);
	r3 = D(r3, s0_1_2, 0x050700FF, 0xEAFCF904, 0x040201FC, 0xE0FEE304);
	r4 = D(r4, s0_1_2, 0xFA0603FF, 0x111D12FE, 0xE9F40201, 0xEEE9EF06);
	r5 = D(r5, s0_1_2, 0x0F08160B, 0xEFFCF103, 0x01F709F5, 0xF301F804);
	r0 = D(r0, s0_2_0, 0x15F2FFF7, 0x0128F402, 0x050AF800, 0xEDFF0103);
	r1 = D(r1, s0_2_0, 0xFE0D0609, 0xE7F6FE01, 0xF7F9F802, 0xFBF3ED0B);
	r2 = D(r2, s0_2_0, 0xFD05FAFB, 0x0009FF0E, 0xF8F8F104, 0x01F2170B);
	r3 = D(r3, s0_2_0, 0x050401F9, 0xFC040308, 0x01F10F04, 0xF50F08FC);
	r4 = D(r4, s0_2_0, 0xF7130703, 0x0109FA03, 0xFC09FE05, 0x03FDFEFB);
	r5 = D(r5, s0_2_0, 0xDA092506, 0xF71403FB, 0x06F9FFFE, 0x030AFFF5);
	r0 = D(r0, s0_2_1, 0x0B000000, 0x0923FCFF, 0x091E04FE, 0xD101E614);
	r1 = D(r1, s0_2_1, 0x0602000A, 0xDEF3F103, 0x06040218, 0xEDF9FD03);
	r2 = D(r2, s0_2_1, 0xEFE21E0A, 0xFF040600, 0xFEEE1A06, 0xFCFB0D03);
	r3 = D(r3, s0_2_1, 0x000EEDFF, 0xFCF5110B, 0xF2F6EE00, 0x02FE070F);
	r4 = D(r4, s0_2_1, 0x0B050B0A, 0x0B1A05F4, 0xEFFA0004, 0xF6F008FC);
	r5 = D(r5, s0_2_1, 0xF7BBE118, 0xF309FD02, 0xEBF4DE00, 0x0609FB06);
	r0 = D(r0, s0_2_2, 0x04F90502, 0x081AFA07, 0x101608FF, 0x8181FCF6);
	r1 = D(r1, s0_2_2, 0x050AFDFF, 0xF6ECF701, 0x01FBFC03, 0xFDFDFB02);
	r2 = D(r2, s0_2_2, 0x11060201, 0x030C0900, 0x000310FE, 0x0015F804);
	r3 = D(r3, s0_2_2, 0x040B0001, 0xF0F8FF05, 0x06040105, 0xE5F9F404);
	r4 = D(r4, s0_2_2, 0xFF0FFFFF, 0x141301FE, 0x00FF09FD, 0xFBF40100);
	r5 = D(r5, s0_2_2, 0xEE0BFF01, 0xFD00F902, 0xFBFE0BFD, 0x01FFF9FD);
	r0 = D(r0, s1_0_0, 0xF90DFA0C, 0x04F7FEFC, 0xFC03FCFF, 0xFF030002);
	r1 = D(r1, s1_0_0, 0xFFFD02F3, 0xF9F70001, 0xF70000F4, 0x06EEFCFC);
	r2 = D(r2, s1_0_0, 0xF4070504, 0x01FFF9F7, 0xFE09FE02, 0xEE1003FC);
	r3 = D(r3, s1_0_0, 0x03FCFFFE, 0x0B05F40B, 0xF70E14F6, 0xFDFC01FD);
	r4 = D(r4, s1_0_0, 0x03F80500, 0x00FFFDFD, 0x17F4FFFA, 0xF3100907);
	r5 = D(r5, s1_0_0, 0xF5F4FED6, 0x09F6F9FC, 0x07FAF90D, 0xFEF6FDFB);
	r0 = D(r0, s1_0_1, 0xF60E05FE, 0xDD020105, 0xF3FC04FE, 0x04FE06FD);
	r1 = D(r1, s1_0_1, 0xAB03F3F4, 0xF1F80202, 0x11EB00F7, 0xE40D01F1);
	r2 = D(r2, s1_0_1, 0xF60003F8, 0x13F608F3, 0x21040315, 0x071107F5);
	r3 = D(r3, s1_0_1, 0x0201FD01, 0x0E04110A, 0x0404EBE9, 0x0CFE0B03);
	r4 = D(r4, s1_0_1, 0x17FC020A, 0x09FCFC00, 0x34020501, 0xEF19F5FD);
	r5 = D(r5, s1_0_1, 0x2DFDDECE, 0x0AFF0A07, 0x0A061405, 0x06F6F600);
	r0 = D(r0, s1_0_2, 0xFD02FC06, 0xFAFA0B06, 0xDFFB00FB, 0x07FD0BF9);
	r1 = D(r1, s1_0_2, 0xED010402, 0xF70301FD, 0xFC06F305, 0x0A0A0AF6);
	r2 = D(r2, s1_0_2, 0x07F8F70B, 0xFB0507FF, 0xFCF5F903, 0x1517F00D);
	r3 = D(r3, s1_0_2, 0x04FF0000, 0x0905F802, 0xF8FEF9F6, 0x16FE0007);
	r4 = D(r4, s1_0_2, 0x08FBFB07, 0x05FF0300, 0x15F70403, 0xFA01FFF5);
	r5 = D(r5, s1_0_2, 0xFFF014F7, 0x13040906, 0xF502FA01, 0x08F80808);
	r0 = D(r0, s1_1_0, 0x0E05F703, 0x0201D713, 0xFF000403, 0xF4180101);
	r1 = D(r1, s1_1_0, 0xF904F605, 0xF40DF9F5, 0xFBEE030F, 0xF019F7F3);
	r2 = D(r2, s1_1_0, 0x01FCFE01, 0xF3F80EF8, 0x0405EB0D, 0xFD02FCF8);
	r3 = D(r3, s1_1_0, 0xF8FD08FD, 0x0400F403, 0xFEF1F11C, 0xF9FE01FE);
	r4 = D(r4, s1_1_0, 0x04FBFFF7, 0xFC02FFFF, 0x0A0900F1, 0x06F91709);
	r5 = D(r5, s1_1_0, 0xC3FA2508, 0xFB08ECFC, 0x09FEF9FD, 0xFE06FCFA);
	r0 = D(r0, s1_1_1, 0x06F420FF, 0xBCF9F71B, 0xFEF22C06, 0x0A02FB01);
	r1 = D(r1, s1_1_1, 0xEB1EC8F2, 0x0110E0F1, 0x811581E4, 0x0F0C1EF9);
	r2 = D(r2, s1_1_1, 0x1E07E90D, 0xDD1A0FF4, 0xF7F0FB04, 0xF5FDE30C);
	r3 = D(r3, s1_1_1, 0xFA0303FE, 0x2109CE0D, 0xE40E46EF, 0xE80DEFF7);
	r4 = D(r4, s1_1_1, 0xE711F803, 0x0A04E6F9, 0x180F03F8, 0xFE0A3B03);
	r5 = D(r5, s1_1_1, 0x0726F1DE, 0x071AE20A, 0x0900260E, 0xC6FB02FF);
	r0 = D(r0, s1_1_2, 0xF8FC06FA, 0xF8FBFB22, 0xDAF4EF06, 0x2CF90210);
	r1 = D(r1, s1_1_2, 0x0901F506, 0x2203F9FC, 0x1E07F9F3, 0x02FE0903);
	r2 = D(r2, s1_1_2, 0x00D0F9EC, 0xE5030100, 0xEFF1FEF7, 0xFBE306E2);
	r3 = D(r3, s1_1_2, 0x0CFD04FB, 0x2EFA0A08, 0xF7E912F1, 0x360002FF);
	r4 = D(r4, s1_1_2, 0x050AFF09, 0x4F140E03, 0x16FB0CF0, 0xFE0616F9);
	r5 = D(r5, s1_1_2, 0xF2FDEE0D, 0x27000B0C, 0xF2F9F6F3, 0x19141502);
	r0 = D(r0, s1_2_0, 0xFF02E707, 0x02FE1803, 0x03FC02FE, 0x03010DF2);
	r1 = D(r1, s1_2_0, 0x05F805FE, 0xFDF71804, 0xF0030B01, 0x0CFD090C);
	r2 = D(r2, s1_2_0, 0xFF07FC09, 0xFAF811FA, 0xFFF0020D, 0x0ED1F3F0);
	r3 = D(r3, s1_2_0, 0x00FB1600, 0xFF0A03FD, 0x0604E2FE, 0xFCF80D05);
	r4 = D(r4, s1_2_0, 0xFFFFF9F6, 0xFFFE0BFD, 0xF803EBF9, 0x00FE00FC);
	r5 = D(r5, s1_2_0, 0x0DFB06EF, 0xFD00F0FB, 0xFAF2F6F9, 0x0204F602);
	r0 = D(r0, s1_2_1, 0xF516F206, 0x04FBE3FE, 0x01F8E9F9, 0x17F106F1);
	r1 = D(r1, s1_2_1, 0xFC002600, 0x04003C03, 0xF90224F6, 0xFC21190D);
	r2 = D(r2, s1_2_1, 0xFCDBF7F3, 0x0DFDF0F2, 0x0BEEEDEC, 0x0BE0E6E0);
	r3 = D(r3, s1_2_1, 0xFC0E48FC, 0xF40703F0, 0x0F10FD0C, 0xFFFDFFF0);
	r4 = D(r4, s1_2_1, 0x0FFAE3F4, 0x0000EFFD, 0xF7F70C00, 0xF80C02FF);
	r5 = D(r5, s1_2_1, 0x14D0F2FF, 0x07E81908, 0xF609100F, 0xFAF4010A);
	r0 = D(r0, s1_2_2, 0xFBFAFA0A, 0x01FFF907, 0xFDE3FF03, 0x81818120);
	r1 = D(r1, s1_2_2, 0x05060300, 0x02000EF6, 0x0D030DF7, 0x001AF8FF);
	r2 = D(r2, s1_2_2, 0x0DE30BFA, 0xF5ED0401, 0x0EE911FD, 0xEDEA120B);
	r3 = D(r3, s1_2_2, 0xFD0308FF, 0x1C0EFEFB, 0xF1020301, 0x0EFC02FC);
	r4 = D(r4, s1_2_2, 0xFFEF03F9, 0xFEFF0102, 0x010507F9, 0xFE0EFF09);
	r5 = D(r5, s1_2_2, 0xE71AF510, 0xFE0FFF06, 0x0BE9E600, 0xFF040006);
	s0_0_0 = G[2][xy.y+0][xy.x+0]; s0_0_1 = G[2][xy.y+0][xy.x+1];
	s0_0_2 = G[2][xy.y+0][xy.x+2]; s0_1_0 = G[2][xy.y+1][xy.x+0];
	s0_1_1 = G[2][xy.y+1][xy.x+1]; s0_1_2 = G[2][xy.y+1][xy.x+2];
	s0_2_0 = G[2][xy.y+2][xy.x+0]; s0_2_1 = G[2][xy.y+2][xy.x+1];
	s0_2_2 = G[2][xy.y+2][xy.x+2]; s1_0_0 = G[3][xy.y+0][xy.x+0];
	s1_0_1 = G[3][xy.y+0][xy.x+1]; s1_0_2 = G[3][xy.y+0][xy.x+2];
	s1_1_0 = G[3][xy.y+1][xy.x+0]; s1_1_1 = G[3][xy.y+1][xy.x+1];
	s1_1_2 = G[3][xy.y+1][xy.x+2]; s1_2_0 = G[3][xy.y+2][xy.x+0];
	s1_2_1 = G[3][xy.y+2][xy.x+1]; s1_2_2 = G[3][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0xF70FF307, 0x00F71302, 0xFCFCFF03, 0xFF0A0401);
	r1 = D(r1, s0_0_0, 0xFE040706, 0x00FF0700, 0x00F0FE05, 0x080E010E);
	r2 = D(r2, s0_0_0, 0xF705F806, 0x0BEA05FF, 0xF8FFF1F2, 0x0303F5F6);
	r3 = D(r3, s0_0_0, 0xFDFC0301, 0xFF05F9F3, 0x0D0B0EFF, 0x07FDFDFE);
	r4 = D(r4, s0_0_0, 0xFEF00FFF, 0x0100FF00, 0x03040308, 0x0A050909);
	r5 = D(r5, s0_0_0, 0xE0EE0918, 0x02F904F4, 0x0F02F901, 0xFD030105);
	r0 = D(r0, s0_0_1, 0xFF0AFC05, 0x020E14FA, 0xF9F80502, 0xFF05F300);
	r1 = D(r1, s0_0_1, 0x000D2301, 0x04040D04, 0xFF031801, 0x000BE60D);
	r2 = D(r2, s0_0_1, 0xFF01E2FB, 0x01EC1209, 0xF8F8CE03, 0x0E01E3EB);
	r3 = D(r3, s0_0_1, 0xFC020300, 0x01F9EBF8, 0x0E01FD07, 0x080A00FC);
	r4 = D(r4, s0_0_1, 0x030215F4, 0xFCFE0905, 0x0CF1F409, 0xFF0CF313);
	r5 = D(r5, s0_0_1, 0x27FBD2EA, 0xFDF8F9FC, 0x0305E814, 0x05EC1BFD);
	r0 = D(r0, s0_0_2, 0x070BFA06, 0x0705000E, 0xFD080803, 0xFC110BF5);
	r1 = D(r1, s0_0_2, 0xFA031102, 0x030206FB, 0xFCF8FE01, 0x0DFE0701);
	r2 = D(r2, s0_0_2, 0x08F5E4FC, 0x020107FC, 0x0A0402F9, 0x07E924FE);
	r3 = D(r3, s0_0_2, 0x00FDFF00, 0x02020601, 0xF9EF1BFC, 0x06F50300);
	r4 = D(r4, s0_0_2, 0x01FF0CF7, 0x03FE07FD, 0xFCFFFA00, 0xFC00F709);
	r5 = D(r5, s0_0_2, 0x2116F31D, 0x0203FC04, 0xFCFEFB02, 0xFCFD0509);
	r0 = D(r0, s0_1_0, 0xFFF5FAFB, 0xF606C805, 0xFFFBFCFE, 0xF9000F0C);
	r1 = D(r1, s0_1_0, 0xE9F7F4F8, 0x09FF06E5, 0x0AF8EC0E, 0xF8F30AEC);
	r2 = D(r2, s0_1_0, 0xFFF1FAF8, 0x0A04FE00, 0x0BEA06F4, 0x1BEA0C17);
	r3 = D(r3, s0_1_0, 0x00010702, 0xFD190306, 0x13EC1315, 0x0B07E705);
	r4 = D(r4, s0_1_0, 0xF8010E19, 0x090A00FD, 0x000BF8F2, 0xFFF91102);
	r5 = D(r5, s0_1_0, 0xECD42702, 0xF007DDF6, 0xFBF10403, 0x0105DBF3);
	r0 = D(r0, s0_1_1, 0xF5F3F6F4, 0x1D270FE6, 0xF9F50B05, 0x09EB0919);
	r1 = D(r1, s0_1_1, 0x0ED307EA, 0xFEEDFBF1, 0xF82C11FA, 0x19CE01F6);
	r2 = D(r2, s0_1_1, 0xE2DB0807, 0xFE190D12, 0xF21A1311, 0xDB010D0C);
	r3 = D(r3, s0_1_1, 0x032AFC02, 0x05F30F1D, 0x03FCFD04, 0xFD291E09);
	r4 = D(r4, s0_1_1, 0xF7301B0B, 0xFB1F0108, 0xFC1301F9, 0xF8EE1109);
	r5 = D(r5, s0_1_1, 0xF4D8FEEF, 0x19DCFDF7, 0x10F9FD0B, 0x050603E4);
	r0 = D(r0, s0_1_2, 0x1004FC01, 0xFF1E0104, 0x0058FDFE, 0xF402F919);
	r1 = D(r1, s0_1_2, 0xF8DF12FD, 0xEEEF1203, 0xFFE8000B, 0xE7EE2201);
	r2 = D(r2, s0_1_2, 0x1615F504, 0x0103FB08, 0xFF36000F, 0xFCFDFBFD);
	r3 = D(r3, s0_1_2, 0x00FBFC01, 0xF0D50305, 0xFD2C06F5, 0xEBC30211);
	r4 = D(r4, s0_1_2, 0xE50408F5, 0x09CB03FC, 0xF9080409, 0xFB1A0600);
	r5 = D(r5, s0_1_2, 0xE50B2D0D, 0xFE040C03, 0x1E2C02FF, 0xEE150D10);
	r0 = D(r0, s0_2_0, 0xF4FBFDF7, 0x05FD010F, 0x02FCFEFD, 0xF7FA0506);
	r1 = D(r1, s0_2_0, 0x09000209, 0x00FB0BFF, 0x03FB1105, 0xF2FA0902);
	r2 = D(r2, s0_2_0, 0x0BF507EE, 0x120109ED, 0x120B06F1, 0x0B0EFCFE);
	r3 = D(r3, s0_2_0, 0x01F60000, 0xF60701F8, 0x0002FDF3, 0x13030500);
	r4 = D(r4, s0_2_0, 0xFBFA0105, 0x03FE02FE, 0x030103F6, 0xFA0401FA);
	r5 = D(r5, s0_2_0, 0x08050719, 0xFBFAF603, 0xF7F90A01, 0x0FFEFA06);
	r0 = D(r0, s0_2_1, 0xEC0A06F9, 0xE8DBECFE, 0x030F03FE, 0x25D30D12);
	r1 = D(r1, s0_2_1, 0xFDF3010D, 0xFF0FFD07, 0x0BE3F3FE, 0xFEE9FB05);
	r2 = D(r2, s0_2_1, 0xD926F0F5, 0xFBF6FA11, 0xE837F6F6, 0x0D0EF503);
	r3 = D(r3, s0_2_1, 0x03E60400, 0xF305FAF5, 0x10FA0709, 0xEA0303F8);
	r4 = D(r4, s0_2_1, 0xEBFFEE03, 0xF4F30503, 0xFF0D0AF8, 0x130800F9);
	r5 = D(r5, s0_2_1, 0x43D80312, 0x19F904F9, 0x24F5FDF7, 0x0AE90DFD);
	r0 = D(r0, s0_2_2, 0x0C0DFBFD, 0x24F6FEF0, 0x0D1202F6, 0x10811BED);
	r1 = D(r1, s0_2_2, 0xFC040308, 0xECFFFE00, 0x0BF61100, 0x0103FEF9);
	r2 = D(r2, s0_2_2, 0xF80709F4, 0x13FE0AFA, 0xE7080CFC, 0x100417DE);
	r3 = D(r3, s0_2_2, 0x03F5FFFE, 0xDAFB0602, 0xFCF50805, 0x09FEFF06);
	r4 = D(r4, s0_2_2, 0xE00A11FB, 0x02F7FEF4, 0xF7020106, 0x0A0B02FD);
	r5 = D(r5, s0_2_2, 0xE3E71F27, 0x04F9FFFB, 0x110003EE, 0x0BFCFA07);
	r0 = D(r0, s1_0_0, 0xF603FF09, 0x1B070C0C, 0xFF020901, 0xFBFBF906);
	r1 = D(r1, s1_0_0, 0x2009F80B, 0x03FEFE04, 0x0803F9F8, 0x08FEFA0C);
	r2 = D(r2, s1_0_0, 0x0BF90500, 0xF4020EF4, 0xF3F91D01, 0x12F618FF);
	r3 = D(r3, s1_0_0, 0x010205FE, 0xF9040003, 0xFD09F9F6, 0x0302FBFD);
	r4 = D(r4, s1_0_0, 0xF00F0FFC, 0xFD00FDFC, 0xE401FBFB, 0xE206F302);
	r5 = D(r5, s1_0_0, 0xD0EA4CFD, 0x0AFE030C, 0xF506FF00, 0x01FDFB04);
	r0 = D(r0, s1_0_1, 0xFA02EC0B, 0x09FAD803, 0x02010F00, 0xF8FE0AFC);
	r1 = D(r1, s1_0_1, 0x11F7F614, 0xFBFBFA07, 0x0F0E03E6, 0xEBF8150B);
	r2 = D(r2, s1_0_1, 0xF7FA07FC, 0x0F0CFFF8, 0x1209EBFC, 0xE71104F8);
	r3 = D(r3, s1_0_1, 0x0100FD01, 0x0602FBF9, 0x0106170A, 0xEE01ECF7);
	r4 = D(r4, s1_0_1, 0xDE19FBF3, 0x0A020004, 0xF409EAF9, 0xF01210F4);
	r5 = D(r5, s1_0_1, 0xF70F26E6, 0x03FCFD01, 0x11F7F4F8, 0x0AE70BFC);
	r0 = D(r0, s1_0_2, 0xFB000004, 0x02FEF4F6, 0xFBF903FD, 0xF1FE0B03);
	r1 = D(r1, s1_0_2, 0x06FA19F5, 0xFF06FF02, 0x0FF208F8, 0xEB09FBF6);
	r2 = D(r2, s1_0_2, 0xFD0A03F3, 0xFA03F7FE, 0xF508FE00, 0xE11218F6);
	r3 = D(r3, s1_0_2, 0xFFFF0402, 0x05FDFB07, 0xFFFCEC01, 0xFF0403F4);
	r4 = D(r4, s1_0_2, 0xF6F8FF0A, 0xFFF9EF00, 0x010203F8, 0xFA0AE205);
	r5 = D(r5, s1_0_2, 0x281208F8, 0xFF04FAF9, 0xFF06FE07, 0x060504F2);
	r0 = D(r0, s1_1_0, 0xFE000D0D, 0x1BF10BF8, 0x07FCFDFF, 0xF5F40AFF);
	r1 = D(r1, s1_1_0, 0x04070D07, 0x000205FA, 0x0EF609FA, 0xFF11160C);
	r2 = D(r2, s1_1_0, 0x04000DFC, 0x0BF2F6FE, 0xE2FCF8ED, 0xE914EDFD);
	r3 = D(r3, s1_1_0, 0x04FF0002, 0xF207EF09, 0x15EC0404, 0x09F7F2FC);
	r4 = D(r4, s1_1_0, 0xFA01020D, 0x04FBF7FF, 0xF8FAF803, 0x07FF0604);
	r5 = D(r5, s1_1_0, 0x1A0E0322, 0x01F90800, 0x08031607, 0x05F8F10D);
	r0 = D(r0, s1_1_1, 0x04F4C805, 0x1FEDACF5, 0x06000BFC, 0xEB11E502);
	r1 = D(r1, s1_1_1, 0x02FBFBFE, 0xEE101DF1, 0xEAE8F9D6, 0xF804FC11);
	r2 = D(r2, s1_1_1, 0xDA20ED02, 0x12F038F7, 0xF8111316, 0xFD21FC11);
	r3 = D(r3, s1_1_1, 0x09000D01, 0xFC090103, 0xEF19E820, 0xF9FF0813);
	r4 = D(r4, s1_1_1, 0xF7FE20FD, 0x15FC0910, 0xFF1E2C21, 0xECF8E309);
	r5 = D(r5, s1_1_1, 0x0B15BD35, 0x14F40006, 0x0C0EE510, 0x09D6FC00);
	r0 = D(r0, s1_1_2, 0xFF06080A, 0x0CF1D800, 0x05F5E605, 0x0D18130E);
	r1 = D(r1, s1_1_2, 0x0AF60405, 0xFA09FAF8, 0xFEFFCFE1, 0xFD030408);
	r2 = D(r2, s1_1_2, 0xF91F21F8, 0xFDE9F10C, 0xFE0D1BF1, 0xFF101000);
	r3 = D(r3, s1_1_2, 0x05FFEF03, 0xFE080FF6, 0x0CFCE207, 0x02142DF1);
	r4 = D(r4, s1_1_2, 0xFBFADF0A, 0x05F30002, 0x06082BF3, 0x0014F503);
	r5 = D(r5, s1_1_2, 0xF90C0102, 0x060C0EF9, 0xF8FE230A, 0x090B0FF1);
	r0 = D(r0, s1_2_0, 0xF904FE0C, 0x05FDFEF2, 0x02FF04FC, 0xFCF91AFC);
	r1 = D(r1, s1_2_0, 0x06FEFC01, 0xFDF80DF7, 0xFA0004F5, 0x0A050201);
	r2 = D(r2, s1_2_0, 0xFB0805F0, 0x0801FFF2, 0xF2FBF700, 0xF70BFE02);
	r3 = D(r3, s1_2_0, 0x06010001, 0x0301F90F, 0xFCFF00FA, 0x04FBEF03);
	r4 = D(r4, s1_2_0, 0x05F9040A, 0x050001FE, 0xFC0407FE, 0xF9FC010B);
	r5 = D(r5, s1_2_0, 0x14010503, 0x0302F509, 0x0405FE05, 0xFE00F8FC);
	r0 = D(r0, s1_2_1, 0x02FDFD04, 0xF804DBFB, 0xFAF8F904, 0xFAFB0AFF);
	r1 = D(r1, s1_2_1, 0x000506F6, 0x07EEF6F1, 0xF706FEFC, 0xFC0609F0);
	r2 = D(r2, s1_2_1, 0x00110314, 0xF50503FD, 0x110DFB11, 0xFA04ED14);
	r3 = D(r3, s1_2_1, 0x05FB09FE, 0x000B0A07, 0xFE030FF7, 0xFBFEEA16);
	r4 = D(r4, s1_2_1, 0xFF06E60F, 0x00FC0107, 0x0FFD08FB, 0xFEFEF600);
	r5 = D(r5, s1_2_1, 0x26210AD7, 0x09FAFAF8, 0x18F9FCF5, 0x09EB07F6);
	r0 = D(r0, s1_2_2, 0xFE0300FD, 0xFEF6EDEF, 0xFFF900F7, 0x09818181);
	r1 = D(r1, s1_2_2, 0x0102FF02, 0xFFFE0205, 0x04FF0CFE, 0x02FBFD06);
	r2 = D(r2, s1_2_2, 0xF4F6DF03, 0x03F9FDFF, 0xFB05EF03, 0x00F1F403);
	r3 = D(r3, s1_2_2, 0x01020AFA, 0xFE14F40B, 0x08050FF7, 0x0510E9F3);
	r4 = D(r4, s1_2_2, 0xFCFCF605, 0xFEF9ED01, 0x00FFFE00, 0xFB03FBFB);
	r5 = D(r5, s1_2_2, 0x101122E4, 0xFE010EF8, 0x030E0208, 0x000706F1);
	s0_0_0 = G[4][xy.y+0][xy.x+0]; s0_0_1 = G[4][xy.y+0][xy.x+1];
	s0_0_2 = G[4][xy.y+0][xy.x+2]; s0_1_0 = G[4][xy.y+1][xy.x+0];
	s0_1_1 = G[4][xy.y+1][xy.x+1]; s0_1_2 = G[4][xy.y+1][xy.x+2];
	s0_2_0 = G[4][xy.y+2][xy.x+0]; s0_2_1 = G[4][xy.y+2][xy.x+1];
	s0_2_2 = G[4][xy.y+2][xy.x+2]; s1_0_0 = G[5][xy.y+0][xy.x+0];
	s1_0_1 = G[5][xy.y+0][xy.x+1]; s1_0_2 = G[5][xy.y+0][xy.x+2];
	s1_1_0 = G[5][xy.y+1][xy.x+0]; s1_1_1 = G[5][xy.y+1][xy.x+1];
	s1_1_2 = G[5][xy.y+1][xy.x+2]; s1_2_0 = G[5][xy.y+2][xy.x+0];
	s1_2_1 = G[5][xy.y+2][xy.x+1]; s1_2_2 = G[5][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0xFDF90409, 0x19F023DD, 0x0304FFFB, 0x0307FA08);
	r1 = D(r1, s0_0_0, 0x24070DEB, 0x0EF80607, 0x0DFFFF0C, 0x15FDFB08);
	r2 = D(r2, s0_0_0, 0x04FBFC03, 0xF3F807FC, 0xE7DDFC01, 0xE6DD03F2);
	r3 = D(r3, s0_0_0, 0x04FDFD02, 0xED0404EE, 0xE70EFB00, 0xF9FB0900);
	r4 = D(r4, s0_0_0, 0xF5F20702, 0x01FEFFFE, 0xF705FCF6, 0xF30000F3);
	r5 = D(r5, s0_0_0, 0x20EDCBF3, 0x0AF501F3, 0xEDEDF8FB, 0x0DFC0102);
	r0 = D(r0, s0_0_1, 0xFA081007, 0x0B0407F3, 0x0B040CFB, 0xF20605FE);
	r1 = D(r1, s0_0_1, 0x13C0F4D1, 0x01F0F608, 0xF906EEFE, 0xFED6EFFA);
	r2 = D(r2, s0_0_1, 0xEB030406, 0xFA10F50D, 0xE7051AF9, 0xF0060008);
	r3 = D(r3, s0_0_1, 0x00030501, 0xF9160012, 0x03F5F0FB, 0xEC0FEB0E);
	r4 = D(r4, s0_0_1, 0x030F020C, 0x0EFF02FD, 0xFCF5F2F4, 0xF009EDC5);
	r5 = D(r5, s0_0_1, 0xF1A9FCF3, 0xFF060806, 0xE91F0BEF, 0xF7EBF1EE);
	r0 = D(r0, s0_0_2, 0x03E90AFA, 0xF60D1004, 0x010DFF05, 0x0802FDFF);
	r1 = D(r1, s0_0_2, 0xF917EE0F, 0xFFF90104, 0x080DF7F6, 0xFFF4F900);
	r2 = D(r2, s0_0_2, 0xFC110201, 0x03FF0707, 0xF7E80BF6, 0x1D0D040E);
	r3 = D(r3, s0_0_2, 0x0101FF02, 0x02EBFBF1, 0x06120803, 0x03060607);
	r4 = D(r4, s0_0_2, 0x040506FB, 0x00020302, 0x06F811F7, 0x09E7FAF1);
	r5 = D(r5, s0_0_2, 0xE405F804, 0x000116FC, 0x07E506E9, 0xFC0C0F05);
	r0 = D(r0, s0_1_0, 0x01F3081C, 0x111222E7, 0x02FB0A07, 0xFAF7FA0D);
	r1 = D(r1, s0_1_0, 0xF810FAED, 0xF8FBF5F7, 0xFF0001F0, 0xDD00EBF7);
	r2 = D(r2, s0_1_0, 0xEAEEF81C, 0x02ECF9FA, 0xE3CC04FA, 0xEFEA0E11);
	r3 = D(r3, s0_1_0, 0x000205FE, 0x08FFECF7, 0xFAF1FBFE, 0x0F00FC03);
	r4 = D(r4, s0_1_0, 0x1300FBF9, 0x06F60402, 0xFD0BF6F1, 0x03F7FBFE);
	r5 = D(r5, s0_1_0, 0xCADCD3AE, 0x021900DB, 0xF8EAFA16, 0x0B0500EC);
	r0 = D(r0, s0_1_1, 0x06E5332D, 0x02BF0DFF, 0xFD0BEF12, 0xFB13F9FF);
	r1 = D(r1, s0_1_1, 0xFF02D6F3, 0xF1F1DCCB, 0xFD05ADFF, 0xF9FB03D8);
	r2 = D(r2, s0_1_1, 0xCCE3FAE4, 0x0510F6CF, 0xE5F013DA, 0xD8ABD2C7);
	r3 = D(r3, s0_1_1, 0xFCFEF0ED, 0xF6E8EFBB, 0x1607EFD0, 0xF307E8D9);
	r4 = D(r4, s0_1_1, 0x0CE3F9D3, 0x0B1FFBF9, 0xEEE0E9C6, 0x05EC0FDA);
	r5 = D(r5, s0_1_1, 0x04E1DFA8, 0xFBE30DD5, 0xCD09F5D9, 0xF8EAF0D8);
	r0 = D(r0, s0_1_2, 0x05F70311, 0xFAFBEA05, 0x01EBF405, 0x000D07EB);
	r1 = D(r1, s0_1_2, 0x02000208, 0x04FB04EF, 0x00D201EB, 0x0D0C0CF5);
	r2 = D(r2, s0_1_2, 0xFED9F207, 0xFFD2E6D1, 0x04CFFBF2, 0xE7BBEDFD);
	r3 = D(r3, s0_1_2, 0x02FC0003, 0x0D18FCFE, 0xFA0B05F3, 0x0E0B1301);
	r4 = D(r4, s0_1_2, 0xF8E2E5F8, 0x0A010106, 0xFE0C0D12, 0x080801EA);
	r5 = D(r5, s0_1_2, 0x33EE0720, 0x041E1DF7, 0xFFE7DE18, 0x040E23FB);
	r0 = D(r0, s0_2_0, 0x020A020D, 0xFA021DF3, 0x01FD00FF, 0x0911F804);
	r1 = D(r1, s0_2_0, 0x01FD08FE, 0x01F801F7, 0x00F2FE06, 0xFEF706EE);
	r2 = D(r2, s0_2_0, 0xF8EBF913, 0xF8F706FD, 0xECE20405, 0x090EF2EF);
	r3 = D(r3, s0_2_0, 0x0100FDF8, 0xF8F6F70E, 0x1314FF0A, 0x00F30006);
	r4 = D(r4, s0_2_0, 0xFEFF09EE, 0xFFFBFCFD, 0x05FEF4F9, 0x0A0AFF07);
	r5 = D(r5, s0_2_0, 0x3E1A0308, 0xFEFEFAFC, 0xF812030E, 0x000611F4);
	r0 = D(r0, s0_2_1, 0xFAF1F90B, 0x0E10EE0A, 0x06080108, 0x0DD2FAD3);
	r1 = D(r1, s0_2_1, 0x080A09EF, 0x04EC0DF0, 0x0D0FEEE2, 0xF5EF09F7);
	r2 = D(r2, s0_2_1, 0xEF0DE4D0, 0x030DEDF2, 0xFDF8F9EF, 0xFF14FF0E);
	r3 = D(r3, s0_2_1, 0x04F80AFA, 0x0615F2FA, 0xFEF70CEB, 0x07FFECFA);
	r4 = D(r4, s0_2_1, 0x010EFA09, 0x030DF901, 0xFC0701E1, 0x01FEFB0D);
	r5 = D(r5, s0_2_1, 0x0CCE15DF, 0x08040CF2, 0xFDF9FBD4, 0x01FA05E3);
	r0 = D(r0, s0_2_2, 0xFEFFFC00, 0xFBF51E02, 0x0108090B, 0xFF9B8181);
	r1 = D(r1, s0_2_2, 0x00030403, 0xF9FEF704, 0x05100EF5, 0xEEFCF406);
	r2 = D(r2, s0_2_2, 0xF2FB13FF, 0x06ED0CF6, 0xF2EF1103, 0x000520FC);
	r3 = D(r3, s0_2_2, 0x020107FF, 0x010BF700, 0x120BFFF0, 0x05F802F9);
	r4 = D(r4, s0_2_2, 0x02070901, 0x01FF0403, 0x01080405, 0xFAFDFFFB);
	r5 = D(r5, s0_2_2, 0x07EC2107, 0xFDFF0401, 0xE90206F9, 0x01030401);
	r0 = D(r0, s1_0_0, 0xF902F203, 0xFC09F1FE, 0xFCFBFA03, 0xFEFEF707);
	r1 = D(r1, s1_0_0, 0x06FF0503, 0xFC0A0AFE, 0xF8030FF4, 0xFE0609F0);
	r2 = D(r2, s1_0_0, 0x0AFBF806, 0x03FCF902, 0xFE04F107, 0x09E9E71C);
	r3 = D(r3, s1_0_0, 0xFEFE04FF, 0xF307F70B, 0xFFFEEFFA, 0xF9060203);
	r4 = D(r4, s1_0_0, 0x00FFF5FF, 0xFEFE0204, 0xFC00FEFF, 0xF700F408);
	r5 = D(r5, s1_0_0, 0x0BE3B03A, 0xFC020400, 0xFF04FA01, 0x07FA0104);
	r0 = D(r0, s1_0_1, 0xFEF4EDFA, 0x0B07E307, 0x0500FDFC, 0xFBFFFEF7);
	r1 = D(r1, s1_0_1, 0x0B220119, 0x04FDFE01, 0x01041BFE, 0x1202D8F5);
	r2 = D(r2, s1_0_1, 0x0303FE02, 0xFDFA0DFD, 0xFDE91BF6, 0xFE05ECFC);
	r3 = D(r3, s1_0_1, 0x000205FF, 0xF5F409F7, 0xF401D613, 0xF1FD0AFB);
	r4 = D(r4, s1_0_1, 0x00F80DFE, 0x00FF06FB, 0x06FC0FF8, 0xF4F9E3F1);
	r5 = D(r5, s1_0_1, 0x07301BF4, 0x0209FEF7, 0xF5EE09ED, 0x0912FB01);
	r0 = D(r0, s1_0_2, 0x0008FAF8, 0x02EF06FC, 0x0401EE0D, 0x01FEFBFF);
	r1 = D(r1, s1_0_2, 0x10FBFE0B, 0x0903FDFF, 0x00030AF9, 0x0FFD02E4);
	r2 = D(r2, s1_0_2, 0x030911FB, 0xF90306FF, 0xFAF70FF6, 0xF9111600);
	r3 = D(r3, s1_0_2, 0x0000FD02, 0xEC05F402, 0x0F07F609, 0xE00003EF);
	r4 = D(r4, s1_0_2, 0xFD05F703, 0x0300FF0D, 0xF5FF0BFA, 0xF709EBF0);
	r5 = D(r5, s1_0_2, 0xECF7C818, 0xF4F20DEE, 0xE909ED00, 0xFFF413F7);
	r0 = D(r0, s1_1_0, 0x0705FDF2, 0xFEF9E302, 0x08000103, 0xFD05E50D);
	r1 = D(r1, s1_1_0, 0x05F2E902, 0x0BF1FA06, 0x0BF816EB, 0x06F60414);
	r2 = D(r2, s1_1_0, 0x0AFF0012, 0xF10012FF, 0x0A040212, 0x13F8130A);
	r3 = D(r3, s1_1_0, 0x01000100, 0xEE00EA01, 0xE0162E0B, 0xF1FE0A03);
	r4 = D(r4, s1_1_0, 0xF5FF0DFB, 0x06020002, 0xE700F0F7, 0x0310FDFF);
	r5 = D(r5, s1_1_0, 0xDB03FA1A, 0xFFEFE3F7, 0xF40CF205, 0x03F4F811);
	r0 = D(r0, s1_1_1, 0x0B05FE03, 0xF513DB15, 0x07F8EF0A, 0x12021D13);
	r1 = D(r1, s1_1_1, 0xEFEF24DE, 0xFE0AF7FD, 0x00F5FCFD, 0xF7FC0EEA);
	r2 = D(r2, s1_1_1, 0x06F71804, 0x0003D9F8, 0x00F00C05, 0x07E3FDED);
	r3 = D(r3, s1_1_1, 0x060BEE02, 0x020BE7ED, 0xCFF6F1E0, 0xFB08E4FC);
	r4 = D(r4, s1_1_1, 0x0D1FE50E, 0x04FCDB08, 0xE8FE1CF7, 0x0413DE08);
	r5 = D(r5, s1_1_1, 0xC3FC1EB4, 0xFA0A18EE, 0xF4F60EF9, 0xF3F41609);
	r0 = D(r0, s1_1_2, 0x02070104, 0x02050800, 0x04F903EB, 0x02F906E4);
	r1 = D(r1, s1_1_2, 0xF7F609F7, 0x000AFBF8, 0x07F415E7, 0x010DF80B);
	r2 = D(r2, s1_1_2, 0x040014DB, 0x0EF302F5, 0x0C0B07D9, 0x20F80BE1);
	r3 = D(r3, s1_1_2, 0x02030AFB, 0x09EEE40D, 0xF3FA28CF, 0xFE01F4F8);
	r4 = D(r4, s1_1_2, 0x110DF7FF, 0x06F8FAFD, 0xFDF9EB09, 0xFA0B02F5);
	r5 = D(r5, s1_1_2, 0xCEF6F4D7, 0x03F9F7F9, 0xFB050BEC, 0xF300F5F7);
	r0 = D(r0, s1_2_0, 0x00FCF5F8, 0x1D04ED08, 0x0500FDFB, 0x0303F905);
	r1 = D(r1, s1_2_0, 0xFEFB0605, 0x00070906, 0x0F090C00, 0xFE080400);
	r2 = D(r2, s1_2_0, 0xF5F41206, 0x030416FE, 0xEEF91BFB, 0x01EF0200);
	r3 = D(r3, s1_2_0, 0xFDFD00FC, 0xEA01F801, 0xCEF9FC0E, 0xFC090DFD);
	r4 = D(r4, s1_2_0, 0x1000F007, 0x0A0204FF, 0xF00402FF, 0xFBFDFDFB);
	r5 = D(r5, s1_2_0, 0xE1D7BFFE, 0xFDFEF6EC, 0xDE01FF04, 0x0CFCF8FC);
	r0 = D(r0, s1_2_1, 0x0201F7FE, 0xF7E9F40F, 0x02FDF906, 0xF5121200);
	r1 = D(r1, s1_2_1, 0x0400F5FE, 0x1012F209, 0xEBFD0605, 0x1614DAFC);
	r2 = D(r2, s1_2_1, 0x01E003FB, 0xFDF7F6FD, 0xFFF80FEE, 0x06DA140A);
	r3 = D(r3, s1_2_1, 0x040DF903, 0xF5EAE902, 0xE735D4F1, 0xF9EEEFFA);
	r4 = D(r4, s1_2_1, 0xFCDDFE04, 0x06F9F906, 0xFB0418F9, 0xFBF60101);
	r5 = D(r5, s1_2_1, 0xEB1D01F8, 0xF3ED0DF7, 0xE61501F7, 0xFDFF12FC);
	r0 = D(r0, s1_2_2, 0xFE0210FE, 0xF4FA03FC, 0xFDEB0205, 0x9F81CDCD);
	r1 = D(r1, s1_2_2, 0x02FDFF01, 0x0906EA0C, 0x0202FFF5, 0x040408FE);
	r2 = D(r2, s1_2_2, 0xF6FC11EB, 0xF9E60B02, 0xFAE4F6EF, 0xF5E807F8);
	r3 = D(r3, s1_2_2, 0xFF030304, 0xF1F4EAF6, 0x0AF3F406, 0xF600F7F2);
	r4 = D(r4, s1_2_2, 0xF7E8F9FA, 0xFFF30505, 0x020AF7FE, 0xFC0EFDFC);
	r5 = D(r5, s1_2_2, 0x1B1BFC2D, 0xFC13F3F4, 0xFC000CF6, 0x0315F404);
	f0 = vec4(r0) * 6.2000124e-05;
	f0 += vec4(-4.942e-03, -2.086e-02, 1.278e-03, 6.722e-03);
	f0 = clamp(f0, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(0, 0), f0);
	f1 = vec4(r1) * 6.2000124e-05;
	f1 += vec4(1.679e-02, -4.045e-02, -5.704e-04, -7.284e-03);
	f1 = clamp(f1, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(1, 0), f1);
	f2 = vec4(r2) * 6.2000124e-05;
	f2 += vec4(-2.450e-02, 2.003e-03, -7.871e-03, -1.479e-02);
	f2 = clamp(f2, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(2, 0), f2);
	f3 = vec4(r3) * 6.2000124e-05;
	f3 += vec4(-5.756e-03, 2.409e-03, -1.924e-02, -1.488e-02);
	f3 = clamp(f3, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(0, 1), f3);
	f4 = vec4(r4) * 6.2000124e-05;
	f4 += vec4(-9.204e-03, -9.166e-03, -1.061e-02, -2.255e-02);
	f4 = clamp(f4, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(1, 1), f4);
	f5 = vec4(r5) * 6.2000124e-05;
	f5 += vec4(-1.268e-02, 7.456e-03, 1.285e-02, -1.896e-02);
	f5 = clamp(f5, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(2, 1), f5);
}

//!DESC [CuNNy_4x24_DS_vk] -conv4
//!HOOK LUMA
//!COMPUTE 24 16 8 8
//!BIND conv3
//!BIND LUMA
//!SAVE conv4
//!WIDTH LUMA.w 3 *
//!HEIGHT LUMA.h 2 *
//!COMPONENTS 4
//!WHEN OUTPUT.w LUMA.w 1.200 * > OUTPUT.h LUMA.h 1.200 * > *
#extension GL_EXT_spirv_intrinsics : require
#define l0(x, y) (conv3_mul * texelFetch(conv3_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(0, 0), 0))
#define l1(x, y) (conv3_mul * texelFetch(conv3_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(1, 0), 0))
#define l2(x, y) (conv3_mul * texelFetch(conv3_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(2, 0), 0))
#define l3(x, y) (conv3_mul * texelFetch(conv3_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(0, 1), 0))
#define l4(x, y) (conv3_mul * texelFetch(conv3_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(1, 1), 0))
#define l5(x, y) (conv3_mul * texelFetch(conv3_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(2, 1), 0))
spirv_instruction (extensions = ["SPV_KHR_integer_dot_product"], capabilities = [6019, 6018], id = 4450)
int dp4(int a, int b, spirv_literal int fmt);
#define D(r, s, a, b, c, d) r + ivec4(dp4(s, a, 0), dp4(s, b, 0), dp4(s, c, 0), dp4(s, d, 0))
shared int G[6][10][10];
void hook() {
	ivec2 xy = ivec2(gl_LocalInvocationID.xy);
	ivec2 pos = ivec2(gl_WorkGroupID.xy) * ivec2(8, 8) + xy;
	ivec2 opos = pos * ivec2(3, 2);
	ivec2 sz = ivec2(LUMA_size) - ivec2(1);
	for (int y = 0; y < 10; y += 8) {
		int ay = xy.y + y;
		if (ay >= 10) break;
		for (int x = 0; x < 10; x += 8) {
			int ax = xy.x + x;
			if (ax >= 10) break;
			vec4 v0 = l0(x - 1, y - 1) * 1.0000000e+00;
			vec4 v1 = l1(x - 1, y - 1) * 1.0000000e+00;
			vec4 v2 = l2(x - 1, y - 1) * 1.0000000e+00;
			vec4 v3 = l3(x - 1, y - 1) * 1.0000000e+00;
			vec4 v4 = l4(x - 1, y - 1) * 1.0000000e+00;
			vec4 v5 = l5(x - 1, y - 1) * 1.0000000e+00;
			G[0][ay][ax] = int(packSnorm4x8(v0));
			G[1][ay][ax] = int(packSnorm4x8(v1));
			G[2][ay][ax] = int(packSnorm4x8(v2));
			G[3][ay][ax] = int(packSnorm4x8(v3));
			G[4][ay][ax] = int(packSnorm4x8(v4));
			G[5][ay][ax] = int(packSnorm4x8(v5));
		}
	}
	barrier();
	int s0_0_0, s0_0_1, s0_0_2, s0_1_0, s0_1_1, s0_1_2, s0_2_0, s0_2_1, s0_2_2, s1_0_0, s1_0_1, s1_0_2, s1_1_0, s1_1_1, s1_1_2, s1_2_0, s1_2_1, s1_2_2;
	ivec4 r0, r1, r2, r3, r4, r5;
	vec4 f0, f1, f2, f3, f4, f5;
	r0 = ivec4(0); r1 = ivec4(0); r2 = ivec4(0); r3 = ivec4(0); r4 = ivec4(0); r5 = ivec4(0);
	s0_0_0 = G[0][xy.y+0][xy.x+0]; s0_0_1 = G[0][xy.y+0][xy.x+1];
	s0_0_2 = G[0][xy.y+0][xy.x+2]; s0_1_0 = G[0][xy.y+1][xy.x+0];
	s0_1_1 = G[0][xy.y+1][xy.x+1]; s0_1_2 = G[0][xy.y+1][xy.x+2];
	s0_2_0 = G[0][xy.y+2][xy.x+0]; s0_2_1 = G[0][xy.y+2][xy.x+1];
	s0_2_2 = G[0][xy.y+2][xy.x+2]; s1_0_0 = G[1][xy.y+0][xy.x+0];
	s1_0_1 = G[1][xy.y+0][xy.x+1]; s1_0_2 = G[1][xy.y+0][xy.x+2];
	s1_1_0 = G[1][xy.y+1][xy.x+0]; s1_1_1 = G[1][xy.y+1][xy.x+1];
	s1_1_2 = G[1][xy.y+1][xy.x+2]; s1_2_0 = G[1][xy.y+2][xy.x+0];
	s1_2_1 = G[1][xy.y+2][xy.x+1]; s1_2_2 = G[1][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0xE50AFCFE, 0x11FF0101, 0xF403FF05, 0x1701FE01);
	r1 = D(r1, s0_0_0, 0x0100F7FD, 0xFD01FEFE, 0x0001F102, 0xFFF900FF);
	r2 = D(r2, s0_0_0, 0xD3FEF1FD, 0xE906FC01, 0x150F0201, 0xF103F900);
	r3 = D(r3, s0_0_0, 0xC00109F1, 0xE5EF02FD, 0xE30205FC, 0x0B140501);
	r4 = D(r4, s0_0_0, 0x03020201, 0xC104FF01, 0xE3050303, 0x1DEFFD01);
	r5 = D(r5, s0_0_0, 0x81DC0C0B, 0x0AF807FE, 0x0207F901, 0x28F90501);
	r0 = D(r0, s0_0_1, 0x2C04EC11, 0xD8FE03FB, 0xF4FCF702, 0xEFFBFC03);
	r1 = D(r1, s0_0_1, 0x00F9EBF5, 0xEF07F8FE, 0xF9F902FE, 0x0800FF05);
	r2 = D(r2, s0_0_1, 0xCF05ECFF, 0x1A05F907, 0x2807F815, 0xFEFEF3FA);
	r3 = D(r3, s0_0_1, 0x0900F40C, 0xF0F506F4, 0x0D0DF905, 0x10010704);
	r4 = D(r4, s0_0_1, 0x1A05EA00, 0x0BFBFE0D, 0x0304E9FC, 0x21FCEEFA);
	r5 = D(r5, s0_0_1, 0xCCEA1EF0, 0xFEEF0BF5, 0x08FD010D, 0x0204FA01);
	r0 = D(r0, s0_0_2, 0x06F7F504, 0xFD02FCFF, 0xFFFDFA02, 0xF4FEF2F8);
	r1 = D(r1, s0_0_2, 0x300CFA0A, 0xFB01FAFF, 0x0200FD01, 0x060000FF);
	r2 = D(r2, s0_0_2, 0xFDFE0301, 0xFBFDF901, 0xFB00F900, 0x08FA0403);
	r3 = D(r3, s0_0_2, 0xFA0DEE01, 0x060003FF, 0xFF060400, 0x1105FF05);
	r4 = D(r4, s0_0_2, 0xEB01F2F9, 0x0503FFF9, 0x0703030A, 0x05F6F4F9);
	r5 = D(r5, s0_0_2, 0x11FB0E04, 0x070203FA, 0xF5FF0E05, 0x06FCF3FC);
	r0 = D(r0, s0_1_0, 0xCBF9FAFD, 0x2CF3FCF8, 0x1B12120F, 0xEEFEFE04);
	r1 = D(r1, s0_1_0, 0x3A0EE80E, 0x360BEDFE, 0x1A20EEF4, 0x3B0EEBF9);
	r2 = D(r2, s0_1_0, 0xF50AF6F9, 0x0205FD05, 0x23FDF9F2, 0x190DF50C);
	r3 = D(r3, s0_1_0, 0xE0F00DEE, 0x1E03F3FD, 0x0B3D05FC, 0x33131206);
	r4 = D(r4, s0_1_0, 0xF702FEFA, 0xFEEC00FC, 0xE6E902F0, 0xFEE5FBF2);
	r5 = D(r5, s0_1_0, 0x3103E6E7, 0xEFC602F8, 0x0A06EFEE, 0x160003FD);
	r0 = D(r0, s0_1_1, 0xDF0FFDC5, 0x2BFFFBEA, 0x1A01EEC7, 0x10E6F2F5);
	r1 = D(r1, s0_1_1, 0xCE19D88E, 0x0507FBF6, 0xED0DEC01, 0xED05ECE1);
	r2 = D(r2, s0_1_1, 0x1209E8D0, 0xF90AFCE6, 0x0810EF9D, 0xEE28FBCF);
	r3 = D(r3, s0_1_1, 0x0CF7F3D9, 0x2FFC00DF, 0x17A815EF, 0x291DF2DE);
	r4 = D(r4, s0_1_1, 0x0A1EE9EF, 0x2BFED3D5, 0x1AFD04DD, 0x13E4F9E5);
	r5 = D(r5, s0_1_1, 0x58F7DF81, 0xE465E6F1, 0x1FD3F8F1, 0x280EE40B);
	r0 = D(r0, s0_1_2, 0x0608F3EF, 0x060100FC, 0xEAFCFD03, 0xF5FAFA02);
	r1 = D(r1, s0_1_2, 0x0004FAF5, 0x06FBFB00, 0xFF0001FE, 0xFB04EE03);
	r2 = D(r2, s0_1_2, 0x0508E80D, 0x0600F6FF, 0x1AFADDF1, 0xFE0DF1F8);
	r3 = D(r3, s0_1_2, 0x0AF9EA0E, 0x01FCF90B, 0x09F50CFB, 0x0407EFFD);
	r4 = D(r4, s0_1_2, 0xFF08FAFD, 0xF9F7E304, 0xFA03EC0C, 0xEE04FD04);
	r5 = D(r5, s0_1_2, 0xFD07D405, 0x040DF3FC, 0xFBF31200, 0xF10A04EE);
	r0 = D(r0, s0_2_0, 0xF4FD0005, 0xEC03FF00, 0xFD000205, 0x0502FD00);
	r1 = D(r1, s0_2_0, 0x0AFEF9F3, 0xF9FDFAFE, 0xFF03FB04, 0xFAFE06FF);
	r2 = D(r2, s0_2_0, 0xFA00FEFC, 0xF5FBF8FB, 0x0FF6FC0E, 0xF3020106);
	r3 = D(r3, s0_2_0, 0x0E06F909, 0xF9020202, 0xF5FA06FF, 0x010A0403);
	r4 = D(r4, s0_2_0, 0xFDFFFF03, 0x0501FFFA, 0xF900FBF8, 0xFEFFFDF9);
	r5 = D(r5, s0_2_0, 0xE60BFC04, 0x070602FD, 0x0402F6F6, 0x1913EBFC);
	r0 = D(r0, s0_2_1, 0x00FA00FF, 0x04FCF308, 0x00FEE9F7, 0xFD000103);
	r1 = D(r1, s0_2_1, 0xF80CCFFF, 0xFD07F903, 0xFF03F6FF, 0x0A08E5FC);
	r2 = D(r2, s0_2_1, 0x08060009, 0xF30A03EE, 0xF50C02E6, 0x0803F6FF);
	r3 = D(r3, s0_2_1, 0xEF010602, 0x0500FF0C, 0x01FB070C, 0x11FCF5FA);
	r4 = D(r4, s0_2_1, 0x0002FE05, 0xF5FCFCFE, 0x0DF709EC, 0x00FDFAFF);
	r5 = D(r5, s0_2_1, 0xF109FF11, 0x050100E7, 0x0BFAF7E6, 0xE515F7D8);
	r0 = D(r0, s0_2_2, 0xFC000301, 0xFFF8F5FE, 0xFDF9FF08, 0xFE02F1FD);
	r1 = D(r1, s0_2_2, 0x050C0502, 0xFA04FAFB, 0x0003FDFF, 0xFD05F702);
	r2 = D(r2, s0_2_2, 0xFE01F702, 0xFB0103FC, 0xF114060E, 0x06FFFB03);
	r3 = D(r3, s0_2_2, 0x060500FC, 0x01FCF3FC, 0x010604FC, 0x03FEF202);
	r4 = D(r4, s0_2_2, 0x0201F6FE, 0x080CEBFC, 0x00F8EEFE, 0xFF03F900);
	r5 = D(r5, s0_2_2, 0x15FFEBFA, 0x00FF0301, 0x06FB0F06, 0x0605F507);
	r0 = D(r0, s1_0_0, 0xFEFE01FC, 0xFEFBFC00, 0xFDFD11FB, 0xFCFD0502);
	r1 = D(r1, s1_0_0, 0x00FD0FFE, 0xFEFCF708, 0xFF04F304, 0xFDFE02FE);
	r2 = D(r2, s1_0_0, 0xFD01F6FF, 0xFFFDFF01, 0xFA020800, 0x0102FC04);
	r3 = D(r3, s1_0_0, 0xF707F9F9, 0xFFFCF402, 0xFFFBF1FD, 0xFF0AEDF7);
	r4 = D(r4, s1_0_0, 0xFEFFFF04, 0xFB0713FF, 0xFEF8F405, 0xFBFCF90C);
	r5 = D(r5, s1_0_0, 0xF8EC1809, 0xFDFB1400, 0xF9FE0702, 0xFEF80302);
	r0 = D(r0, s1_0_1, 0x138107D8, 0x01FDFFFF, 0xFDF8EE03, 0xFEFCEC02);
	r1 = D(r1, s1_0_1, 0x07FC15F2, 0xFFF8F704, 0xFE060304, 0x0207FD0D);
	r2 = D(r2, s1_0_1, 0x0504150A, 0x08F20101, 0x000902F7, 0x01F7FC02);
	r3 = D(r3, s1_0_1, 0xFCFD0E02, 0xE607BF0C, 0x16F719FF, 0x0A0781E3);
	r4 = D(r4, s1_0_1, 0x00FB09FE, 0x0302E203, 0xFFF428F0, 0xF7EFEB10);
	r5 = D(r5, s1_0_1, 0xEAFCEEFC, 0xEF07DD05, 0x00F30DE2, 0xFD03EC0E);
	r0 = D(r0, s1_0_2, 0x10F803F7, 0x01FFED03, 0x00FA0CFF, 0x03FB0B01);
	r1 = D(r1, s1_0_2, 0xEFFDF00E, 0x04FD0504, 0xFD00FE00, 0x00000EFF);
	r2 = D(r2, s1_0_2, 0xFB01FA03, 0x0BFC0700, 0x10FB0BFF, 0xF8050601);
	r3 = D(r3, s1_0_2, 0x01FE0A08, 0xF8FE010A, 0x0FF6F0FC, 0xF8030005);
	r4 = D(r4, s1_0_2, 0xFE03F70E, 0x08FC1706, 0x01FB0607, 0x04FE03F9);
	r5 = D(r5, s1_0_2, 0xDE01E102, 0xF5FC0703, 0xFCEA17F6, 0x060606FE);
	r0 = D(r0, s1_1_0, 0x0BFDF802, 0xFBFC0701, 0x04FFE5F5, 0xFBFD0400);
	r1 = D(r1, s1_1_0, 0x0609FB10, 0x03F72906, 0x03E82009, 0xF5050F0E);
	r2 = D(r2, s1_1_0, 0x06000803, 0x0EFB09FF, 0x10EFF9FB, 0x05F80E01);
	r3 = D(r3, s1_1_0, 0xF2001AFD, 0x06FE1203, 0x21FF07F2, 0xFF1721DF);
	r4 = D(r4, s1_1_0, 0x00020602, 0xF101FD09, 0xE6FD000B, 0xF1FA0806);
	r5 = D(r5, s1_1_0, 0x09FC1CEA, 0xE603F004, 0xECFAFF08, 0x03F8F604);
	r0 = D(r0, s1_1_1, 0x1BFE05F5, 0xEEF92B02, 0xFEFC1003, 0x05F00000);
	r1 = D(r1, s1_1_1, 0xED81D3CE, 0x239F34F4, 0x09F2EBF7, 0x24DEE8D2);
	r2 = D(r2, s1_1_1, 0xEBD8C4B7, 0x03FBDEF5, 0xE2BDEFB6, 0x03F4FEFA);
	r3 = D(r3, s1_1_1, 0x28EDD5C7, 0x1BF3DEEB, 0x122CD0D8, 0x19D0F3F0);
	r4 = D(r4, s1_1_1, 0x0BDDDCF8, 0x1AE21EFE, 0xFFD324F1, 0x14DFCCF1);
	r5 = D(r5, s1_1_1, 0x2481D4BE, 0xF5BD2E0A, 0x13FF04FB, 0x03F328F3);
	r0 = D(r0, s1_1_2, 0x1403FCEB, 0x05F91201, 0xFFFC0BF8, 0xF3EDF5FF);
	r1 = D(r1, s1_1_2, 0xFB0135EC, 0x08010506, 0x01000905, 0xF903030C);
	r2 = D(r2, s1_1_2, 0x07FFFB0B, 0xF8F8F1F8, 0x1FFD10E5, 0x06FFEA0A);
	r3 = D(r3, s1_1_2, 0xFE12EAF8, 0x0EF9ECFD, 0xD40503EF, 0x1A06EF09);
	r4 = D(r4, s1_1_2, 0xF8F9F4DE, 0xF900DEFC, 0xF600E20F, 0xE407FEFF);
	r5 = D(r5, s1_1_2, 0x1BFDF7DA, 0x22FAFC06, 0xE605FBD6, 0x05F9E8F9);
	r0 = D(r0, s1_2_0, 0x04FEF900, 0x040302FE, 0xF8FB22E9, 0xFFFF00FF);
	r1 = D(r1, s1_2_0, 0xF0FE0606, 0xEAFAF8F3, 0xF200FA02, 0x0FFFF703);
	r2 = D(r2, s1_2_0, 0x01FDFF09, 0x0101F802, 0x13FA15FD, 0xFCFC0006);
	r3 = D(r3, s1_2_0, 0xFB03FDFD, 0x02FDFAFD, 0xFC02FAFC, 0xF20413FD);
	r4 = D(r4, s1_2_0, 0x0603FE04, 0x0FFCFA07, 0xFBFA0E07, 0x08FB0201);
	r5 = D(r5, s1_2_0, 0xECFBFAF4, 0x01FD01FC, 0xFCF108F7, 0x15020008);
	r0 = D(r0, s1_2_1, 0xFE010500, 0x0781E2FE, 0xFD06F0E5, 0x03FE05FE);
	r1 = D(r1, s1_2_1, 0xFEFCEEDD, 0xF10012EE, 0xFDFF01F4, 0xF1050DE4);
	r2 = D(r2, s1_2_1, 0x110705F6, 0x2202FDF0, 0x17120EC8, 0xF7FA02FF);
	r3 = D(r3, s1_2_1, 0x000508F1, 0xF4000A01, 0xE1050801, 0x1C07F3FA);
	r4 = D(r4, s1_2_1, 0xFDFEFF12, 0xFD0205E3, 0x10FC0DE1, 0xF600FEF6);
	r5 = D(r5, s1_2_1, 0xFB1D00DE, 0x1BFE00EE, 0x0FFEF8F7, 0x04EFE2DE);
	r0 = D(r0, s1_2_2, 0xFA020201, 0xF50600EF, 0xF9FD08F6, 0xF7FE0003);
	r1 = D(r1, s1_2_2, 0x14032404, 0x05F7FD04, 0x03FE0002, 0x01FDFC0A);
	r2 = D(r2, s1_2_2, 0xFC01000C, 0x0700F903, 0xFEFF06F2, 0x0B03F7FC);
	r3 = D(r3, s1_2_2, 0x01FCFF00, 0xF2000AFB, 0xFB05FCFC, 0x04030CF7);
	r4 = D(r4, s1_2_2, 0x04000301, 0xF703050A, 0xF304F500, 0xF3FF0500);
	r5 = D(r5, s1_2_2, 0xED032AC9, 0x06F8FFFD, 0xEEFC05F3, 0x2702FCF4);
	s0_0_0 = G[2][xy.y+0][xy.x+0]; s0_0_1 = G[2][xy.y+0][xy.x+1];
	s0_0_2 = G[2][xy.y+0][xy.x+2]; s0_1_0 = G[2][xy.y+1][xy.x+0];
	s0_1_1 = G[2][xy.y+1][xy.x+1]; s0_1_2 = G[2][xy.y+1][xy.x+2];
	s0_2_0 = G[2][xy.y+2][xy.x+0]; s0_2_1 = G[2][xy.y+2][xy.x+1];
	s0_2_2 = G[2][xy.y+2][xy.x+2]; s1_0_0 = G[3][xy.y+0][xy.x+0];
	s1_0_1 = G[3][xy.y+0][xy.x+1]; s1_0_2 = G[3][xy.y+0][xy.x+2];
	s1_1_0 = G[3][xy.y+1][xy.x+0]; s1_1_1 = G[3][xy.y+1][xy.x+1];
	s1_1_2 = G[3][xy.y+1][xy.x+2]; s1_2_0 = G[3][xy.y+2][xy.x+0];
	s1_2_1 = G[3][xy.y+2][xy.x+1]; s1_2_2 = G[3][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0x00FC0904, 0x01FFFFFA, 0x0EF703FC, 0x07FD03FA);
	r1 = D(r1, s0_0_0, 0x0DFAF208, 0x0202FF0B, 0x02FEF3DF, 0xF500FE05);
	r2 = D(r2, s0_0_0, 0x01F9E8D9, 0x01FD0900, 0x04FAFAEA, 0x05FAFD01);
	r3 = D(r3, s0_0_0, 0xF9F50013, 0xF803FBFE, 0x09000812, 0xC3D4FE81);
	r4 = D(r4, s0_0_0, 0x02FFFE07, 0xFEF703EF, 0x02F70E08, 0x000AFCFF);
	r5 = D(r5, s0_0_0, 0xF7001703, 0xF4FEF2F0, 0xF609FFF9, 0xFB03000A);
	r0 = D(r0, s0_0_1, 0xF1FAF40A, 0xF9020B09, 0xFD060906, 0x0107FE03);
	r1 = D(r1, s0_0_1, 0x09121705, 0x07F70C0B, 0x01010B07, 0x08FB070A);
	r2 = D(r2, s0_0_1, 0xCFF7FA2C, 0xFCF408FA, 0x01F5EEF6, 0xF9040307);
	r3 = D(r3, s0_0_1, 0x07FDECF5, 0x0E12F206, 0x07F1F2F2, 0xD1F3F9D4);
	r4 = D(r4, s0_0_1, 0xE7F5C0E2, 0x0111FE05, 0x00EB02F7, 0x0C02FFF6);
	r5 = D(r5, s0_0_1, 0x0E152414, 0xFE11070D, 0xFBFEF708, 0x12FCFAF3);
	r0 = D(r0, s0_0_2, 0x06FE020B, 0x01FDFF06, 0xF8000408, 0xEFFD0406);
	r1 = D(r1, s0_0_2, 0x0AD804F1, 0xFD020101, 0x01FC0104, 0xFE020505);
	r2 = D(r2, s0_0_2, 0x01FF0104, 0xFB000603, 0xDEF90216, 0x07FEFC00);
	r3 = D(r3, s0_0_2, 0xF2FF0109, 0x02FB0304, 0xF9030100, 0xF7020205);
	r4 = D(r4, s0_0_2, 0x06040B08, 0xF5F8FE1A, 0x09F80103, 0xFC0C0BFD);
	r5 = D(r5, s0_0_2, 0x240A0BD8, 0x0DFB0400, 0xFF00F8F9, 0xF4060608);
	r0 = D(r0, s0_1_0, 0x0802F7FA, 0x0003FBFD, 0x0703F4E9, 0x03020706);
	r1 = D(r1, s0_1_0, 0xE6F1F6EF, 0xD7F5D4EF, 0xCBF4B01A, 0xF6FFD6E5);
	r2 = D(r2, s0_1_0, 0xFDFAFD17, 0xFFFDEE04, 0x0DFAF60C, 0xFCF504F5);
	r3 = D(r3, s0_1_0, 0x0906010E, 0x0902F8ED, 0xF3ED05DF, 0x0EFA01D4);
	r4 = D(r4, s0_1_0, 0xFDFF16FE, 0x000CFB16, 0x090EF626, 0xFD1A0906);
	r5 = D(r5, s0_1_0, 0xE5FCC9E0, 0x0018F51D, 0xF013E514, 0x070606FC);
	r0 = D(r0, s0_1_1, 0xFBED01D9, 0x110BEBF6, 0xFFF70FEB, 0x0B0DEDFD);
	r1 = D(r1, s0_1_1, 0x0222E1D6, 0xF00AD81D, 0x050519EF, 0x09060716);
	r2 = D(r2, s0_1_1, 0x1D1123CA, 0x140DD917, 0x1AFBD2D6, 0x040DE320);
	r3 = D(r3, s0_1_1, 0xE4F304FB, 0xFD02E9F4, 0x1D0BDEFC, 0xDD28E3D6);
	r4 = D(r4, s0_1_1, 0x1DF9D729, 0xEAEDB400, 0xF0F8E0F8, 0xF3F2E61A);
	r5 = D(r5, s0_1_1, 0xF9E9BAE6, 0xFCF51204, 0xE8EBFE23, 0xEBF7FA06);
	r0 = D(r0, s0_1_2, 0xE8F2FA02, 0x06FD0600, 0x0309FF07, 0x0806F7FD);
	r1 = D(r1, s0_1_2, 0xD1E40524, 0x0C0AF5F1, 0x04FAFE02, 0x03FAF705);
	r2 = D(r2, s0_1_2, 0xF5F6010D, 0x100EF7D2, 0x2BF70BDA, 0xFEF2FAEF);
	r3 = D(r3, s0_1_2, 0x060F08F6, 0x120804FB, 0x161BF9E7, 0xFC03000A);
	r4 = D(r4, s0_1_2, 0xEEFE1EF8, 0x160D08F8, 0xFE060005, 0x080703ED);
	r5 = D(r5, s0_1_2, 0xF2FAF704, 0xE6EB0011, 0xF523F1F0, 0x0D0D0B00);
	r0 = D(r0, s0_2_0, 0xFA03FE03, 0xFEF60402, 0x01FEFF09, 0xFD01FB08);
	r1 = D(r1, s0_2_0, 0x13E6F310, 0x09001307, 0x07FBF604, 0x0AFAFF12);
	r2 = D(r2, s0_2_0, 0xFFFCF810, 0xFE06FF04, 0xE7FB20F7, 0x09FF020A);
	r3 = D(r3, s0_2_0, 0xFFFE0309, 0x09F7FD06, 0x0CFA02FF, 0xFD0504F0);
	r4 = D(r4, s0_2_0, 0x07FFF608, 0xF7FB0513, 0xFB04FCF3, 0xF509FB08);
	r5 = D(r5, s0_2_0, 0x1BE91104, 0xEF04FEFB, 0xF80409FE, 0xFBFFFE08);
	r0 = D(r0, s0_2_1, 0x0FFDF507, 0x1100E900, 0xDDE80906, 0xFAFEFE04);
	r1 = D(r1, s0_2_1, 0x060D1AE7, 0xF9F516FA, 0xF4FD0DFF, 0xE10406F8);
	r2 = D(r2, s0_2_1, 0xF1FA0308, 0xD2F102F1, 0xCFE8FF14, 0xE80701E5);
	r3 = D(r3, s0_2_1, 0x0804FA03, 0x050700FA, 0xF01DF3F3, 0x1503F603);
	r4 = D(r4, s0_2_1, 0xEF05FCFB, 0x04050408, 0xFEEE000D, 0xF0040206);
	r5 = D(r5, s0_2_1, 0x10F9ED00, 0x0AEF0D0F, 0xF7EFFC02, 0x120EE708);
	r0 = D(r0, s0_2_2, 0x0101F604, 0x0408FFF4, 0x050C09FB, 0xFB0206F9);
	r1 = D(r1, s0_2_2, 0xFCECF41D, 0xFFF3040B, 0xFEFE0102, 0xFDF90705);
	r2 = D(r2, s0_2_2, 0xFEFC0503, 0x04F4FA14, 0x07F60B09, 0x08F4F80B);
	r3 = D(r3, s0_2_2, 0xFDFA0103, 0xFD04FEF6, 0xF8FCF7F6, 0x00050707);
	r4 = D(r4, s0_2_2, 0xFCF70506, 0xEBF6F900, 0x080908F9, 0xF7FD02FA);
	r5 = D(r5, s0_2_2, 0x0BF21707, 0x010B0901, 0xFD0F00F2, 0xE2ECFD27);
	r0 = D(r0, s1_0_0, 0xFFFF0AF1, 0xFDFF0603, 0x0B00EEF1, 0xFAFCFAFD);
	r1 = D(r1, s1_0_0, 0x10E0F4E8, 0x04FCF601, 0x0207F7FA, 0xFA04FA01);
	r2 = D(r2, s1_0_0, 0xF307FEFB, 0xF804FBF9, 0xED0FEDF4, 0xFA04F8F5);
	r3 = D(r3, s1_0_0, 0x03FD17F4, 0xFCFFFF02, 0x0007FBFA, 0xF40502E9);
	r4 = D(r4, s1_0_0, 0x0A01F6FF, 0xFD01FEFD, 0x0E060BFF, 0x0E06F707);
	r5 = D(r5, s1_0_0, 0x280AFFFF, 0x0001050C, 0xE0080C11, 0xFDFFF804);
	r0 = D(r0, s1_0_1, 0xE612FABD, 0xFF000407, 0x0502F102, 0x0EFD0108);
	r1 = D(r1, s1_0_1, 0x2F0AED13, 0x04FFFCFB, 0xF9010A0A, 0xF6FD0801);
	r2 = D(r2, s1_0_1, 0x19FFF404, 0xF905EFE8, 0xE108EDF1, 0x0E080010);
	r3 = D(r3, s1_0_1, 0x0909E8F8, 0x13EF1436, 0x0604E4C5, 0x0EFFF8D1);
	r4 = D(r4, s1_0_1, 0xEF0CF1FA, 0x0F07FC03, 0x0F04F8ED, 0xEFEEFF22);
	r5 = D(r5, s1_0_1, 0x2FED031F, 0xFCFB2254, 0xEBFBD9F1, 0x000000FA);
	r0 = D(r0, s1_0_2, 0xFE09FAE8, 0xFE01FF05, 0x0401F8FF, 0x0800F302);
	r1 = D(r1, s1_0_2, 0xECEC031B, 0x0500FEF2, 0xFF00FD04, 0x04FFFC06);
	r2 = D(r2, s1_0_2, 0x0102FD06, 0x0801F8FB, 0x0602FAE6, 0xF9060709);
	r3 = D(r3, s1_0_2, 0x1101FDF7, 0xFAFF0212, 0x04F60013, 0xFD0AFE0F);
	r4 = D(r4, s1_0_2, 0x00FF0712, 0xFFFEFC03, 0x04070404, 0x1001F6F1);
	r5 = D(r5, s1_0_2, 0x08FAF610, 0xFBFF0202, 0x13F7E4FF, 0x0704F8F7);
	r0 = D(r0, s1_1_0, 0xE7FCED04, 0x0205FFFA, 0x2EFFD7FB, 0xF001FBFA);
	r1 = D(r1, s1_1_0, 0x03E70121, 0xEE1404F3, 0x0A090CFB, 0x14FAFE02);
	r2 = D(r2, s1_1_0, 0x1DEFF100, 0x0CFC02FC, 0x21F1F5F9, 0x09FC0B06);
	r3 = D(r3, s1_1_0, 0xF715D9FA, 0x08061209, 0x21FA3904, 0x1C150F03);
	r4 = D(r4, s1_1_0, 0x040201FE, 0x1505EEFB, 0x030FE7E9, 0xF809EBF7);
	r5 = D(r5, s1_1_0, 0xDB0CF3F4, 0xE10DD103, 0xFA0C04EF, 0x0D00F604);
	r0 = D(r0, s1_1_1, 0x1A11D202, 0x17FFFD33, 0xFAE7010C, 0x2E0DF908);
	r1 = D(r1, s1_1_1, 0x6E19B9E6, 0xBB07F4E0, 0x110CFE10, 0x1A23EE08);
	r2 = D(r2, s1_1_1, 0x031F14EC, 0xF4020FD1, 0xFED2FBB6, 0x2013F80A);
	r3 = D(r3, s1_1_1, 0xF7F8100E, 0x021F0B1A, 0xC71C0668, 0x25180615);
	r4 = D(r4, s1_1_1, 0x3DEC07F8, 0xD607F81C, 0xD9FE1AF6, 0xE4EFFF22);
	r5 = D(r5, s1_1_1, 0x040BE619, 0x46F1F4C8, 0xC6010A0E, 0xE206F5E7);
	r0 = D(r0, s1_1_2, 0x02F80106, 0x07FAFF0A, 0x070DF806, 0x0A00EB04);
	r1 = D(r1, s1_1_2, 0xEED1FBF8, 0xFAFFFEF4, 0xFFFF03FC, 0x010702FB);
	r2 = D(r2, s1_1_2, 0x0601F8FE, 0x0102FF02, 0x15F8FDF5, 0xF9F50D00);
	r3 = D(r3, s1_1_2, 0xFF1502EA, 0x07040614, 0x090AF7F4, 0x03FA0606);
	r4 = D(r4, s1_1_2, 0x0814F704, 0x0D0DF3F4, 0x1509F102, 0x04FFED04);
	r5 = D(r5, s1_1_2, 0xFB08EE28, 0xF6FA0510, 0xF10F090E, 0x04F90A01);
	r0 = D(r0, s1_2_0, 0x06FDFD01, 0x0001FFFE, 0x0600F7F6, 0x02FFFE02);
	r1 = D(r1, s1_2_0, 0xFFFF0305, 0x05ECF500, 0x15EBF9FF, 0xFF01FB01);
	r2 = D(r2, s1_2_0, 0x00FD00FA, 0xEBFBF6FD, 0xD207FAF9, 0xFCFCFFFE);
	r3 = D(r3, s1_2_0, 0x0BFC0504, 0xF6FD0301, 0xF2010104, 0xDFFB0705);
	r4 = D(r4, s1_2_0, 0xFFFCFCFE, 0xF4000003, 0x02FFFBF6, 0x03FFF4FE);
	r5 = D(r5, s1_2_0, 0xFCFDFF0D, 0x0A01FDFB, 0x1001F805, 0x15F703FA);
	r0 = D(r0, s1_2_1, 0xFCFE07FC, 0xF6F708FF, 0x09FF020B, 0x0AFFFCFA);
	r1 = D(r1, s1_2_1, 0x2611E6FF, 0x11F1F705, 0x020EFBF9, 0x07FD02FC);
	r2 = D(r2, s1_2_1, 0x07FEFBFF, 0xF005EA0A, 0xD707F004, 0x07FDFFFF);
	r3 = D(r3, s1_2_1, 0xF909F800, 0x00F601FE, 0xFAF7FFF7, 0x01F1FE04);
	r4 = D(r4, s1_2_1, 0x08FAFBFD, 0x10F6F9FE, 0x1801F504, 0x04EC0902);
	r5 = D(r5, s1_2_1, 0xF7EE0109, 0xF90EFD0C, 0xF7150A02, 0x0C10F300);
	r0 = D(r0, s1_2_2, 0xF600FBFD, 0xFC0D00FB, 0x050FF801, 0x0B01FD00);
	r1 = D(r1, s1_2_2, 0xEFEB05F0, 0x0DF0FB06, 0xFE030002, 0x0504FB00);
	r2 = D(r2, s1_2_2, 0x030101FF, 0x06F300FD, 0xEDFFF200, 0xF80B01FD);
	r3 = D(r3, s1_2_2, 0x02FF01FF, 0xFB0505FE, 0x0314FC06, 0xFF030305);
	r4 = D(r4, s1_2_2, 0x0606FBFD, 0x04FDFAFB, 0x080904FD, 0x0307F2FE);
	r5 = D(r5, s1_2_2, 0x15EF01FD, 0x00F9FFFE, 0xEA060804, 0xFBEA00F9);
	s0_0_0 = G[4][xy.y+0][xy.x+0]; s0_0_1 = G[4][xy.y+0][xy.x+1];
	s0_0_2 = G[4][xy.y+0][xy.x+2]; s0_1_0 = G[4][xy.y+1][xy.x+0];
	s0_1_1 = G[4][xy.y+1][xy.x+1]; s0_1_2 = G[4][xy.y+1][xy.x+2];
	s0_2_0 = G[4][xy.y+2][xy.x+0]; s0_2_1 = G[4][xy.y+2][xy.x+1];
	s0_2_2 = G[4][xy.y+2][xy.x+2]; s1_0_0 = G[5][xy.y+0][xy.x+0];
	s1_0_1 = G[5][xy.y+0][xy.x+1]; s1_0_2 = G[5][xy.y+0][xy.x+2];
	s1_1_0 = G[5][xy.y+1][xy.x+0]; s1_1_1 = G[5][xy.y+1][xy.x+1];
	s1_1_2 = G[5][xy.y+1][xy.x+2]; s1_2_0 = G[5][xy.y+2][xy.x+0];
	s1_2_1 = G[5][xy.y+2][xy.x+1]; s1_2_2 = G[5][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0xFF0105F7, 0x00FDFC00, 0xFB02FDFD, 0x02020201);
	r1 = D(r1, s0_0_0, 0x150801FC, 0xFF00FD02, 0xF803FFFE, 0x0002F5FE);
	r2 = D(r2, s0_0_0, 0xFAFFFEF8, 0xFF0103F8, 0xF6FC01F2, 0x020709FF);
	r3 = D(r3, s0_0_0, 0x0A10FBF9, 0xFDFD0000, 0x04041AFD, 0xFEF202F6);
	r4 = D(r4, s0_0_0, 0x010300FF, 0xFD08FAFB, 0xFE07FEEF, 0xFBF2FD10);
	r5 = D(r5, s0_0_0, 0xE9FBF605, 0xFDF7E606, 0x00FC03F1, 0x00000105);
	r0 = D(r0, s0_0_1, 0xF9FB13F2, 0x02FBFCFE, 0x00FD09FC, 0xFDFA02FC);
	r1 = D(r1, s0_0_1, 0xE8E4ECDE, 0x000502FD, 0x0102FDFD, 0x00040007);
	r2 = D(r2, s0_0_1, 0xFE0B0202, 0xFB050D04, 0xF5FE0F0B, 0xF903FFF6);
	r3 = D(r3, s0_0_1, 0xF80402E8, 0x05FFEDFC, 0xF8060C0C, 0xF9F80CFE);
	r4 = D(r4, s0_0_1, 0xF3FE05FC, 0xFBF601FE, 0xF90302FA, 0x0C080EFE);
	r5 = D(r5, s0_0_1, 0x17E2E9F3, 0x0AF8EDFA, 0xFF0A0BF0, 0x030507FE);
	r0 = D(r0, s0_0_2, 0xFAFE04F6, 0xFDFDFF03, 0x010307FA, 0x000803FB);
	r1 = D(r1, s0_0_2, 0x0916F513, 0xFF0300FE, 0x000302FF, 0x010105F8);
	r2 = D(r2, s0_0_2, 0x00FDFEFD, 0x000001FC, 0xF9FC08F7, 0x0500FD03);
	r3 = D(r3, s0_0_2, 0xFE0903F9, 0x0603FB0B, 0x02FB00FC, 0xF608FB01);
	r4 = D(r4, s0_0_2, 0x0207FAF9, 0x000A0500, 0xFD07FA00, 0x00FD05EC);
	r5 = D(r5, s0_0_2, 0x05F3F902, 0xFE010002, 0xFEFDFEFF, 0x020605F7);
	r0 = D(r0, s0_1_0, 0x1405070E, 0xFEFD0A05, 0x01F905F0, 0x01000905);
	r1 = D(r1, s0_1_0, 0xFF04F2E8, 0x06031403, 0x100CF4E3, 0x10FD0EF6);
	r2 = D(r2, s0_1_0, 0xF3060F00, 0x0A07090C, 0x1CFAFE13, 0x0105EBF2);
	r3 = D(r3, s0_1_0, 0xFEFA0BFE, 0x13F7FEF2, 0xFDFCAFF5, 0x05F3DAF2);
	r4 = D(r4, s0_1_0, 0xF6FEF8FA, 0xFFF80A0B, 0xF5FE2311, 0xFBF02401);
	r5 = D(r5, s0_1_0, 0x010A09FD, 0xF904540C, 0xF30B36EC, 0xF9FFF4F6);
	r0 = D(r0, s0_1_1, 0x0E2F0717, 0xE707F7F7, 0xFF2407FC, 0xFF0D1BF5);
	r1 = D(r1, s0_1_1, 0xEF0FD7F2, 0x08150FF8, 0xDD14FCF5, 0xCA1BFCCA);
	r2 = D(r2, s0_1_1, 0x161EF0EC, 0x19271208, 0x2F3D1FFF, 0x021CE2EC);
	r3 = D(r3, s0_1_1, 0x1E2617FE, 0xF108FCF6, 0x48FA2FE2, 0xB6F1FE0F);
	r4 = D(r4, s0_1_1, 0x131DF2F6, 0xF82C11E8, 0x101818EA, 0x032316E8);
	r5 = D(r5, s0_1_1, 0x07160209, 0xA9F7CC21, 0x190D12FD, 0x060408F3);
	r0 = D(r0, s0_1_2, 0x1810FF02, 0x0006FD01, 0xFFF702F3, 0x00FE00ED);
	r1 = D(r1, s0_1_2, 0xF0170105, 0x04FD0200, 0x01FEFC00, 0xFEFEFDFF);
	r2 = D(r2, s0_1_2, 0xF40301FA, 0x09080005, 0x1807FCEA, 0xF809FC02);
	r3 = D(r3, s0_1_2, 0xFBFCFFEB, 0xF1FC02F1, 0x0BFB09F8, 0xF308FBF5);
	r4 = D(r4, s0_1_2, 0xE90E01F7, 0xFBF502DF, 0xF60402F1, 0x08F803FB);
	r5 = D(r5, s0_1_2, 0x0614100D, 0xF209F502, 0x06010BEE, 0x0505FCF6);
	r0 = D(r0, s0_2_0, 0x0201F9FE, 0x0307F807, 0xFE01F2F3, 0x06FCFE01);
	r1 = D(r1, s0_2_0, 0xD8FD03FF, 0x0603FB0D, 0xE504F601, 0xE505FBFD);
	r2 = D(r2, s0_2_0, 0x0FFD00FE, 0x0BFF0606, 0x040B0900, 0xEB030003);
	r3 = D(r3, s0_2_0, 0xFD01FE02, 0xFF07FD07, 0xE7FCFD0D, 0xF607FE09);
	r4 = D(r4, s0_2_0, 0x03020304, 0xFF0604FD, 0x23F30AF9, 0x0EFF01FF);
	r5 = D(r5, s0_2_0, 0x0809F111, 0x0CFFFE03, 0x1C0401FF, 0xFA01F1FA);
	r0 = D(r0, s0_2_1, 0x0FFBFEFD, 0x0C0004FF, 0xFA1B0508, 0xF505FFFC);
	r1 = D(r1, s0_2_1, 0x070CF404, 0x0813FC19, 0x0B09FFFE, 0x2406FB05);
	r2 = D(r2, s0_2_1, 0x01020007, 0x1C0BFB0C, 0x5609FEFF, 0x0104F1FF);
	r3 = D(r3, s0_2_1, 0x07F703FF, 0xEC020106, 0xBE09FC15, 0x0C09FD05);
	r4 = D(r4, s0_2_1, 0xEDFDFCFE, 0xF5FAFCFE, 0x000711FB, 0xF1F9F7FB);
	r5 = D(r5, s0_2_1, 0xED080002, 0x27010601, 0xF90608F8, 0xFB1CFBFC);
	r0 = D(r0, s0_2_2, 0x070003FF, 0x04020307, 0xF8F802FB, 0xFB00FEFC);
	r1 = D(r1, s0_2_2, 0xF90903FF, 0x080AFB09, 0xFB02FFFB, 0xF807FEFD);
	r2 = D(r2, s0_2_2, 0x030600FD, 0xFB01FA09, 0x010F09FF, 0xF2050001);
	r3 = D(r3, s0_2_2, 0x0C0304FE, 0x1005FB04, 0xF8FFFF05, 0x09FD01FC);
	r4 = D(r4, s0_2_2, 0x0509FF03, 0x060CFE05, 0xFBFD02F0, 0xF60B0006);
	r5 = D(r5, s0_2_2, 0x0D0CFE02, 0xFA0105FD, 0xFB010206, 0xE00801FA);
	r0 = D(r0, s1_0_0, 0x08FBFA09, 0x040302FE, 0x0A03020D, 0xFD030000);
	r1 = D(r1, s1_0_0, 0x0CF7FB18, 0xFA0200FD, 0x0506FB04, 0xFF0CFF00);
	r2 = D(r2, s1_0_0, 0x0306F9FC, 0x01FFFDFE, 0x11FE041A, 0xFC0100FE);
	r3 = D(r3, s1_0_0, 0xFCF3F7EF, 0xF6FE01F0, 0x05F00107, 0x00F21212);
	r4 = D(r4, s1_0_0, 0xFCFB00FE, 0x01030005, 0xFBFBFAF0, 0xFB07FCF8);
	r5 = D(r5, s1_0_0, 0xE519FBDF, 0xFA0506FA, 0x02F705F8, 0xFEFE0204);
	r0 = D(r0, s1_0_1, 0x0D01FE03, 0x01FA0506, 0x09F70411, 0x0FFFFEFF);
	r1 = D(r1, s1_0_1, 0xCD151F01, 0xFD0507F4, 0x02FAFDF9, 0x07F30A02);
	r2 = D(r2, s1_0_1, 0xEEF0FDFE, 0xFE07FB00, 0x110EF5FB, 0x0900EDF8);
	r3 = D(r3, s1_0_1, 0x1404F2FA, 0x00ECF8FB, 0x02200503, 0x050DF61E);
	r4 = D(r4, s1_0_1, 0x0C080307, 0x10F9F4FE, 0xF918020B, 0x0AFB0F0D);
	r5 = D(r5, s1_0_1, 0x0AEBFFF6, 0xF7DB01FD, 0x0F0BF1F6, 0xFFF900FC);
	r0 = D(r0, s1_0_2, 0x1104F708, 0x03030705, 0xFF00F9FD, 0xEB0000FA);
	r1 = D(r1, s1_0_2, 0x11FD0119, 0x0402F9F8, 0xFFFE0001, 0xFBFB0101);
	r2 = D(r2, s1_0_2, 0x01FF05FB, 0x0301F5FE, 0x1A11F30B, 0xFC000BFA);
	r3 = D(r3, s1_0_2, 0xFEF3F3F5, 0xF5FF0CF9, 0x02F9F501, 0xF9FD0AFB);
	r4 = D(r4, s1_0_2, 0x02F5FCF5, 0xEFFC08FA, 0xFCFAF8FC, 0x0606E9FB);
	r5 = D(r5, s1_0_2, 0x14FA1805, 0xF9010B02, 0x0306F102, 0xF7FDFAFE);
	r0 = D(r0, s1_1_0, 0x03FAFC05, 0xFCFBF904, 0xFA17FF04, 0xF0020102);
	r1 = D(r1, s1_1_0, 0xF3FAEFFF, 0x02FBFA09, 0x0507FE07, 0x02E0FFFF);
	r2 = D(r2, s1_1_0, 0x0BE90402, 0x01FBFE01, 0xFAF5FCF2, 0xF3F20901);
	r3 = D(r3, s1_1_0, 0x050F06FA, 0x06EFFF06, 0x06D817FD, 0xDAEEF819);
	r4 = D(r4, s1_1_0, 0xFC0202FD, 0xF2FAF9F4, 0xF21408EF, 0xF30609FF);
	r5 = D(r5, s1_1_0, 0x0DDBF60F, 0x031CF2FB, 0x041BF002, 0xFB0001F7);
	r0 = D(r0, s1_1_1, 0x13FBF002, 0xF9F7FEFD, 0xD7F9FE04, 0x20FE04FD);
	r1 = D(r1, s1_1_1, 0xE21909EA, 0x16F7D407, 0xFCF0F8F2, 0xDEF8DAFB);
	r2 = D(r2, s1_1_1, 0xAD06D0DD, 0x07F2DFF5, 0xF3E4D9F6, 0xF01AED03);
	r3 = D(r3, s1_1_1, 0xD8F1FE01, 0x00FCE70E, 0x0A22DDE9, 0x13F1FA1F);
	r4 = D(r4, s1_1_1, 0xDE04000E, 0xE8F80006, 0xE609F110, 0xBE070E0F);
	r5 = D(r5, s1_1_1, 0x0BDAC7FD, 0xEACE32F6, 0xDFDD08F4, 0x00051109);
	r0 = D(r0, s1_1_2, 0x14FAEA0D, 0x00F9F405, 0x0A01F7FA, 0x0105F9EE);
	r1 = D(r1, s1_1_2, 0xFC1404FB, 0xFE04030D, 0x010302FA, 0xF7FE09F6);
	r2 = D(r2, s1_1_2, 0xF7F90703, 0xFF00FAFC, 0xE5F6E5FC, 0xF4F708F6);
	r3 = D(r3, s1_1_2, 0xF302F1E9, 0x01FAF10D, 0x0A02FCFA, 0xF8F80A0B);
	r4 = D(r4, s1_1_2, 0x02F5F7E6, 0xFF01F6FC, 0x05FDFB03, 0x030008FB);
	r5 = D(r5, s1_1_2, 0x0FF0CB15, 0xF40309FC, 0x27F5E5FC, 0x03EEF500);
	r0 = D(r0, s1_2_0, 0xFC0902FB, 0x01F8FEF7, 0x1803FC09, 0xFCFD0300);
	r1 = D(r1, s1_2_0, 0x18F6FD18, 0x0F07FB01, 0xF504040F, 0xFCFB02FF);
	r2 = D(r2, s1_2_0, 0xF403FC02, 0xFF0BFFFF, 0x1512FD07, 0xF80206FA);
	r3 = D(r3, s1_2_0, 0xFFFAFEF9, 0xFCF8F800, 0xF6FD0F00, 0xFEF2F706);
	r4 = D(r4, s1_2_0, 0x02FC0100, 0x05F803F5, 0xEE0DFCFB, 0x0FFF03F3);
	r5 = D(r5, s1_2_0, 0x1EF9FC03, 0x0B00F901, 0xED07FC07, 0x05F80301);
	r0 = D(r0, s1_2_1, 0xF40907FF, 0xF2FAF6F9, 0xBAF51C08, 0x08040304);
	r1 = D(r1, s1_2_1, 0xB90C0CEE, 0xE6FC10F5, 0x12FEF1EA, 0xEEFC01EC);
	r2 = D(r2, s1_2_1, 0xFEF40B03, 0x170002FD, 0x06F2FD00, 0xF106FEFA);
	r3 = D(r3, s1_2_1, 0x07FCFE02, 0xE8F9FFFE, 0xE20B04FF, 0x06FD0103);
	r4 = D(r4, s1_2_1, 0xFC04FD06, 0x0D02F7F8, 0xE5FB0D0E, 0x000E0713);
	r5 = D(r5, s1_2_1, 0x05FCF806, 0x1BF9FCFC, 0xD3EFF6F2, 0xDFDFEDE1);
	r0 = D(r0, s1_2_2, 0xFD0009FB, 0xF501F8F5, 0x1004F8FF, 0xE400FFF3);
	r1 = D(r1, s1_2_2, 0x01F00114, 0xF9FF04FD, 0xFDFD02FE, 0x07F9FAFF);
	r2 = D(r2, s1_2_2, 0x01FEF9FE, 0x03020D03, 0x0AF20F25, 0x04FE02FC);
	r3 = D(r3, s1_2_2, 0xFCF80302, 0x0502F7F4, 0x00FBF500, 0xFF020AFD);
	r4 = D(r4, s1_2_2, 0xFEFEFDF8, 0x01F8FAFA, 0xF806F6F4, 0x06FCF1FC);
	r5 = D(r5, s1_2_2, 0x200AEDF7, 0xFCFE0C05, 0x0007FC01, 0xF9021505);
	f0 = vec4(r0) * 6.2000124e-05;
	f0 += vec4(-1.188e-02, -1.607e-02, -1.611e-02, -4.287e-03);
	f0 = clamp(f0, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(0, 0), f0);
	f1 = vec4(r1) * 6.2000124e-05;
	f1 += vec4(-3.957e-02, -6.568e-03, -9.896e-03, -1.407e-02);
	f1 = clamp(f1, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(1, 0), f1);
	f2 = vec4(r2) * 6.2000124e-05;
	f2 += vec4(-1.290e-02, -1.114e-02, -2.533e-02, -1.613e-02);
	f2 = clamp(f2, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(2, 0), f2);
	f3 = vec4(r3) * 6.2000124e-05;
	f3 += vec4(-1.627e-02, -2.642e-02, -1.425e-02, -2.800e-02);
	f3 = clamp(f3, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(0, 1), f3);
	f4 = vec4(r4) * 6.2000124e-05;
	f4 += vec4(-8.369e-03, -1.777e-02, -2.103e-02, -2.094e-02);
	f4 = clamp(f4, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(1, 1), f4);
	f5 = vec4(r5) * 6.2000124e-05;
	f5 += vec4(-4.733e-02, -1.898e-02, -1.359e-02, -1.485e-02);
	f5 = clamp(f5, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(2, 1), f5);
}

//!DESC [CuNNy_4x24_DS_vk] -out-shuffle
//!HOOK LUMA
//!COMPUTE 16 16 8 8
//!BIND conv4
//!BIND LUMA
//!WIDTH LUMA.w 2 *
//!HEIGHT LUMA.h 2 *
//!COMPONENTS 1
//!WHEN OUTPUT.w LUMA.w 1.200 * > OUTPUT.h LUMA.h 1.200 * > *
#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable
#ifdef GL_EXT_shader_explicit_arithmetic_types_float16
#	define V4 f16vec4
#	define M4 f16mat4
#	define F float16_t
#else
#	define V4 vec4
#	define M4 mat4
#	define F float
#endif
#define l0(x, y) V4((conv4_mul * texelFetch(conv4_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(0, 0), 0)))
#define l1(x, y) V4((conv4_mul * texelFetch(conv4_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(1, 0), 0)))
#define l2(x, y) V4((conv4_mul * texelFetch(conv4_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(2, 0), 0)))
#define l3(x, y) V4((conv4_mul * texelFetch(conv4_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(0, 1), 0)))
#define l4(x, y) V4((conv4_mul * texelFetch(conv4_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(1, 1), 0)))
#define l5(x, y) V4((conv4_mul * texelFetch(conv4_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(3, 2) + ivec2(2, 1), 0)))
shared V4 G[6][10][10];
void hook() {
	ivec2 xy = ivec2(gl_LocalInvocationID.xy);
	ivec2 pos = ivec2(gl_WorkGroupID.xy) * ivec2(8, 8) + xy;
	ivec2 opos = pos * ivec2(2, 2);
	ivec2 sz = ivec2(LUMA_size) - ivec2(1);
	for (int y = 0; y < 10; y += 8) {
		int ay = xy.y + y;
		if (ay >= 10) break;
		for (int x = 0; x < 10; x += 8) {
			int ax = xy.x + x;
			if (ax >= 10) break;
			G[0][ay][ax] = l0(x - 1, y - 1);
			G[1][ay][ax] = l1(x - 1, y - 1);
			G[2][ay][ax] = l2(x - 1, y - 1);
			G[3][ay][ax] = l3(x - 1, y - 1);
			G[4][ay][ax] = l4(x - 1, y - 1);
			G[5][ay][ax] = l5(x - 1, y - 1);
		}
	}
	barrier();
	V4 s0_0_0, s0_0_1, s0_0_2, s0_1_0, s0_1_1, s0_1_2, s0_2_0, s0_2_1, s0_2_2, s1_0_0, s1_0_1, s1_0_2, s1_1_0, s1_1_1, s1_1_2, s1_2_0, s1_2_1, s1_2_2;
	V4 r0;
	r0 = V4(0.0);
	s0_0_0 = G[0][xy.y+0][xy.x+0]; s0_0_1 = G[0][xy.y+0][xy.x+1];
	s0_0_2 = G[0][xy.y+0][xy.x+2]; s0_1_0 = G[0][xy.y+1][xy.x+0];
	s0_1_1 = G[0][xy.y+1][xy.x+1]; s0_1_2 = G[0][xy.y+1][xy.x+2];
	s0_2_0 = G[0][xy.y+2][xy.x+0]; s0_2_1 = G[0][xy.y+2][xy.x+1];
	s0_2_2 = G[0][xy.y+2][xy.x+2]; s1_0_0 = G[1][xy.y+0][xy.x+0];
	s1_0_1 = G[1][xy.y+0][xy.x+1]; s1_0_2 = G[1][xy.y+0][xy.x+2];
	s1_1_0 = G[1][xy.y+1][xy.x+0]; s1_1_1 = G[1][xy.y+1][xy.x+1];
	s1_1_2 = G[1][xy.y+1][xy.x+2]; s1_2_0 = G[1][xy.y+2][xy.x+0];
	s1_2_1 = G[1][xy.y+2][xy.x+1]; s1_2_2 = G[1][xy.y+2][xy.x+2];
	r0 += M4(-1.412e-03, 4.590e-04, -6.390e-05, -2.278e-04, -8.056e-02, -4.255e-03, 1.542e-03, -3.815e-03, -3.120e-03, 4.374e-04, -1.333e-03, 7.195e-04, -3.356e-02, 5.252e-03, -7.004e-04, -3.443e-03) * s0_0_0;
	r0 += M4(-4.641e-05, -1.970e-03, 8.294e-05, 3.206e-04, -1.669e-01, -2.190e-01, -5.288e-03, -4.112e-03, 1.433e-01, -1.393e-02, 1.978e-02, 2.840e-03, 7.550e-04, 3.358e-02, 2.133e-03, -2.204e-03) * s0_0_1;
	r0 += M4(1.852e-04, 8.488e-04, -2.023e-05, -2.096e-05, 6.222e-03, -2.013e-02, -1.258e-03, 1.823e-03, -1.537e-03, -2.265e-02, 6.645e-04, -3.609e-03, 8.275e-05, -9.798e-05, -1.156e-05, 5.994e-05) * s0_0_2;
	r0 += M4(9.399e-02, -4.859e-03, 4.521e-04, 2.617e-03, 2.486e-04, 2.947e-03, 7.105e-02, -6.176e-03, -2.277e-04, -2.019e-04, -1.520e-03, 3.908e-04, -2.189e-01, -6.537e-03, -2.046e-01, -3.434e-03) * s0_1_0;
	r0 += M4(1.401e-01, 2.280e-01, 7.307e-04, -9.549e-03, 1.848e-03, 1.037e-05, 1.860e-01, 2.434e-01, 6.518e-02, 1.749e-03, 1.899e-01, -1.805e-02, 1.258e-04, 1.951e-01, -3.334e-03, 1.684e-01) * s0_1_1;
	r0 += M4(4.016e-04, 1.385e-02, 4.126e-04, 6.121e-03, 1.548e-03, 9.728e-04, -4.040e-03, 1.497e-02, -2.173e-03, -3.300e-03, -4.352e-03, -2.499e-02, -1.914e-06, 8.177e-05, 8.174e-05, -2.321e-05) * s0_1_2;
	r0 += M4(6.771e-03, -3.178e-03, -6.116e-02, 9.423e-04, 9.670e-05, -2.856e-06, 1.924e-04, 1.210e-04, 1.511e-03, 9.486e-05, -2.665e-04, -5.518e-04, -4.663e-03, -4.208e-03, -5.190e-02, -3.512e-05) * s0_2_0;
	r0 += M4(-6.137e-03, 6.870e-03, -7.043e-02, -1.672e-01, -8.695e-05, 1.382e-05, -7.182e-04, -7.027e-04, 4.058e-03, 1.754e-03, 6.394e-03, 4.892e-03, 1.402e-03, 1.058e-03, 4.269e-03, 6.470e-02) * s0_2_1;
	r0 += M4(-8.560e-04, -3.343e-03, -1.090e-03, 1.029e-02, -1.009e-05, -9.977e-06, 5.328e-04, 5.844e-04, 2.151e-03, 1.446e-04, 2.206e-03, 4.262e-03, 5.976e-06, 1.474e-05, 8.503e-05, -3.860e-05) * s0_2_2;
	r0 += M4(8.050e-03, -1.097e-03, 5.969e-03, -1.631e-03, 1.612e-03, 2.327e-03, -3.781e-04, 5.795e-05, 3.488e-03, -3.417e-04, 1.530e-04, -4.655e-04, 1.691e-03, -7.706e-04, 4.532e-03, -3.608e-05) * s1_0_0;
	r0 += M4(-6.718e-02, 4.799e-02, -6.748e-03, 8.468e-03, 3.628e-02, 2.407e-02, 8.824e-04, 4.985e-03, -2.507e-02, -1.200e-04, 4.785e-03, 5.143e-04, -3.470e-03, -1.298e-03, 1.073e-02, -3.619e-03) * s1_0_1;
	r0 += M4(7.747e-05, -1.438e-02, 5.230e-04, -5.944e-03, -1.092e-02, -4.533e-03, 6.945e-04, 1.128e-04, -1.224e-04, -2.203e-02, 4.669e-04, 7.170e-04, -2.490e-03, -1.415e-02, 6.001e-04, 1.877e-03) * s1_0_2;
	r0 += M4(1.887e-02, -2.719e-03, 1.128e-02, -2.373e-03, -3.946e-03, 4.125e-05, -6.785e-03, 9.838e-05, -1.956e-03, 1.568e-04, 2.176e-03, 7.806e-06, -2.265e-02, 9.523e-04, 1.705e-02, -2.393e-03) * s1_1_0;
	r0 += M4(-2.109e-01, 1.470e-01, -1.949e-01, 1.430e-01, -1.143e-02, -2.051e-02, -2.235e-01, -1.096e-01, 7.169e-02, -2.367e-03, 9.994e-02, 2.059e-02, 1.572e-01, -3.299e-02, -3.823e-01, 1.071e-01) * s1_1_1;
	r0 += M4(9.026e-03, 1.187e-03, 9.246e-04, -3.795e-03, -4.890e-04, 1.331e-03, -6.113e-04, -9.547e-02, -3.297e-02, 1.319e-02, 2.516e-02, -3.393e-01, -5.533e-03, 1.517e-02, 4.031e-03, 1.102e-01) * s1_1_2;
	r0 += M4(9.360e-03, 6.294e-04, 1.337e-02, -2.027e-03, 2.966e-04, 2.302e-04, 2.799e-03, -7.583e-04, 4.182e-04, -6.509e-05, 8.576e-04, 7.689e-05, -3.682e-03, -1.350e-04, -4.195e-03, -2.753e-03) * s1_2_0;
	r0 += M4(-8.494e-03, 7.321e-03, -8.225e-02, 3.939e-02, 1.796e-04, -4.705e-04, -1.147e-03, 1.989e-03, -1.253e-04, -8.144e-04, 5.624e-03, -3.522e-03, -4.427e-03, -4.669e-03, 1.103e-02, -4.589e-03) * s1_2_1;
	r0 += M4(3.380e-04, -5.466e-03, 3.822e-03, -5.928e-03, -1.314e-04, 4.885e-04, -1.805e-03, -6.778e-04, -9.896e-04, -6.454e-03, 7.104e-03, 1.312e-02, -1.655e-04, -1.421e-03, 3.929e-03, -1.309e-02) * s1_2_2;
	s0_0_0 = G[2][xy.y+0][xy.x+0]; s0_0_1 = G[2][xy.y+0][xy.x+1];
	s0_0_2 = G[2][xy.y+0][xy.x+2]; s0_1_0 = G[2][xy.y+1][xy.x+0];
	s0_1_1 = G[2][xy.y+1][xy.x+1]; s0_1_2 = G[2][xy.y+1][xy.x+2];
	s0_2_0 = G[2][xy.y+2][xy.x+0]; s0_2_1 = G[2][xy.y+2][xy.x+1];
	s0_2_2 = G[2][xy.y+2][xy.x+2]; s1_0_0 = G[3][xy.y+0][xy.x+0];
	s1_0_1 = G[3][xy.y+0][xy.x+1]; s1_0_2 = G[3][xy.y+0][xy.x+2];
	s1_1_0 = G[3][xy.y+1][xy.x+0]; s1_1_1 = G[3][xy.y+1][xy.x+1];
	s1_1_2 = G[3][xy.y+1][xy.x+2]; s1_2_0 = G[3][xy.y+2][xy.x+0];
	s1_2_1 = G[3][xy.y+2][xy.x+1]; s1_2_2 = G[3][xy.y+2][xy.x+2];
	r0 += M4(1.468e-03, -3.901e-05, -1.248e-04, 2.287e-04, 1.883e-02, -2.029e-03, 1.304e-03, 3.487e-04, 1.060e-02, -1.479e-04, -1.682e-03, 3.375e-04, 1.946e-02, 6.143e-04, -3.982e-03, 4.959e-04) * s0_0_0;
	r0 += M4(1.470e-02, -1.698e-03, -3.213e-04, 7.795e-04, 6.597e-02, 6.885e-02, -7.597e-04, 5.321e-04, 8.569e-03, 1.642e-02, -2.493e-03, -3.939e-03, -1.449e-02, 2.229e-02, 5.580e-03, -1.514e-03) * s0_0_1;
	r0 += M4(1.096e-04, 3.155e-03, -1.257e-03, -1.559e-03, 3.429e-03, 1.867e-02, 2.125e-03, 1.026e-03, 1.188e-03, 5.767e-03, -8.128e-04, -2.855e-04, 3.905e-04, -1.157e-02, -6.123e-04, 2.081e-03) * s0_0_2;
	r0 += M4(6.305e-03, -2.540e-04, -9.160e-03, 3.632e-03, -1.688e-02, 5.691e-03, 4.846e-02, -9.711e-03, -6.096e-02, -1.211e-02, 3.881e-02, -2.657e-03, 7.076e-02, 2.367e-03, 7.812e-02, 3.050e-03) * s0_1_0;
	r0 += M4(-4.072e-01, 7.934e-02, 4.832e-02, -3.942e-02, -1.037e-01, -1.106e-01, 1.260e-01, 1.468e-01, -1.762e-01, -1.791e-01, 1.681e-01, 1.665e-01, -6.792e-02, 1.606e-01, -1.155e-01, 1.606e-01) * s0_1_1;
	r0 += M4(4.606e-03, 2.109e-02, -1.824e-03, 3.424e-03, 6.669e-03, -4.889e-03, -5.425e-04, 2.794e-02, 4.787e-06, -5.277e-02, 1.713e-03, 5.358e-02, -5.147e-03, -4.087e-02, 1.525e-03, -4.306e-02) * s0_1_2;
	r0 += M4(-5.294e-04, -9.886e-04, -3.200e-03, -1.190e-04, 4.175e-04, 3.886e-04, -1.548e-02, 8.059e-04, 3.134e-03, -1.778e-03, -5.641e-03, -6.169e-03, 4.595e-03, 3.304e-04, 2.167e-02, 2.885e-03) * s0_2_0;
	r0 += M4(8.941e-04, -2.171e-03, 3.650e-02, 1.116e-02, 1.838e-04, -1.496e-03, -3.600e-02, -4.163e-02, 5.750e-03, 7.983e-03, -9.496e-03, -4.716e-03, 7.239e-03, 5.118e-03, 2.838e-02, 4.217e-02) * s0_2_1;
	r0 += M4(3.809e-04, -3.310e-03, -8.706e-03, -1.737e-02, 4.512e-04, 4.964e-04, 4.098e-03, -9.749e-03, -1.251e-03, 2.728e-03, -3.400e-03, -4.411e-03, 6.909e-04, 2.004e-03, -2.772e-03, 7.124e-04) * s0_2_2;
	r0 += M4(1.501e-02, 8.126e-03, 1.555e-04, 1.446e-03, -2.684e-02, -3.397e-04, -7.197e-04, -1.441e-03, -7.885e-03, -1.837e-06, -1.172e-06, 4.309e-06, 2.764e-02, 5.643e-03, 3.071e-03, 6.388e-04) * s1_0_0;
	r0 += M4(-1.260e-02, 1.812e-02, -3.525e-03, -4.893e-03, -4.649e-02, -6.514e-02, 1.509e-04, -1.796e-03, -2.350e-02, -2.334e-02, -6.626e-07, -3.405e-07, 2.630e-03, 3.056e-02, 5.694e-03, 4.275e-03) * s1_0_1;
	r0 += M4(-3.801e-03, -5.573e-04, -1.156e-03, -1.417e-03, 1.500e-03, -8.544e-03, -7.437e-04, 1.546e-03, -1.441e-05, -8.708e-03, -2.759e-07, -8.807e-05, 2.281e-04, -2.848e-03, -3.631e-04, 3.015e-04) * s1_0_2;
	r0 += M4(-3.510e-02, 1.048e-02, 4.294e-03, -5.449e-03, 3.331e-02, -5.394e-03, -5.818e-03, 1.303e-02, -2.289e-02, 3.511e-07, -2.296e-02, 6.432e-09, 9.511e-04, 6.303e-03, 3.762e-02, 8.128e-03) * s1_1_0;
	r0 += M4(1.828e-01, -1.382e-01, 4.628e-02, 1.203e-01, 1.479e-01, 1.479e-01, -1.064e-01, -1.298e-01, -6.567e-02, -6.519e-02, -6.567e-02, -6.567e-02, -6.324e-02, -4.622e-02, -4.777e-02, 1.906e-02) * s1_1_1;
	r0 += M4(-9.769e-03, 6.227e-02, -3.120e-03, 3.378e-03, -1.371e-03, 3.360e-02, 4.308e-03, 3.860e-03, -4.892e-07, -2.301e-02, 1.309e-08, -2.302e-02, -2.235e-03, -2.850e-02, -8.053e-04, -2.357e-02) * s1_1_2;
	r0 += M4(6.782e-03, 2.388e-03, 1.494e-04, 2.615e-03, 2.588e-03, 1.044e-03, 1.965e-02, 3.650e-03, 4.609e-06, 1.225e-06, -7.187e-03, 9.130e-07, -1.045e-03, -1.110e-03, -7.578e-03, -1.464e-03) * s1_2_0;
	r0 += M4(-1.067e-02, 1.354e-02, -8.660e-02, -2.508e-02, 2.034e-03, 3.782e-03, 6.106e-02, 6.055e-02, 2.940e-06, 6.113e-06, -2.252e-02, -2.218e-02, -6.465e-04, -6.448e-04, -2.995e-02, -3.053e-02) * s1_2_1;
	r0 += M4(-6.656e-04, -1.530e-03, 4.745e-03, 1.348e-02, 1.223e-03, 1.104e-03, 2.745e-03, 2.113e-02, 2.607e-06, -1.360e-06, -2.066e-06, -8.110e-03, 3.618e-06, -5.043e-04, -5.246e-04, -9.724e-03) * s1_2_2;
	s0_0_0 = G[4][xy.y+0][xy.x+0]; s0_0_1 = G[4][xy.y+0][xy.x+1];
	s0_0_2 = G[4][xy.y+0][xy.x+2]; s0_1_0 = G[4][xy.y+1][xy.x+0];
	s0_1_1 = G[4][xy.y+1][xy.x+1]; s0_1_2 = G[4][xy.y+1][xy.x+2];
	s0_2_0 = G[4][xy.y+2][xy.x+0]; s0_2_1 = G[4][xy.y+2][xy.x+1];
	s0_2_2 = G[4][xy.y+2][xy.x+2]; s1_0_0 = G[5][xy.y+0][xy.x+0];
	s1_0_1 = G[5][xy.y+0][xy.x+1]; s1_0_2 = G[5][xy.y+0][xy.x+2];
	s1_1_0 = G[5][xy.y+1][xy.x+0]; s1_1_1 = G[5][xy.y+1][xy.x+1];
	s1_1_2 = G[5][xy.y+1][xy.x+2]; s1_2_0 = G[5][xy.y+2][xy.x+0];
	s1_2_1 = G[5][xy.y+2][xy.x+1]; s1_2_2 = G[5][xy.y+2][xy.x+2];
	r0 += M4(-5.416e-03, 2.383e-03, 8.237e-04, -1.418e-03, 2.903e-03, -2.570e-03, 1.777e-03, 2.596e-03, -4.139e-02, 6.293e-04, -1.118e-02, -2.531e-03, -7.237e-03, -1.516e-03, -1.688e-03, -9.422e-04) * s0_0_0;
	r0 += M4(5.214e-03, 8.717e-03, 1.266e-03, -1.454e-03, -8.032e-02, -3.696e-02, -8.925e-03, 1.329e-02, 8.297e-02, 4.111e-02, 8.605e-03, 2.650e-02, -1.344e-02, -2.875e-02, -2.978e-03, -3.144e-04) * s0_0_1;
	r0 += M4(-1.415e-04, 1.241e-03, 1.167e-05, -1.048e-04, 5.570e-03, 1.521e-02, 6.300e-05, 1.505e-03, 1.750e-03, 1.715e-02, 4.891e-04, 1.567e-03, -1.075e-03, 1.594e-02, -8.935e-04, -1.682e-03) * s0_0_2;
	r0 += M4(8.729e-02, 1.545e-02, 2.753e-03, -2.312e-03, -4.142e-02, -1.050e-02, -4.461e-02, 1.394e-02, -1.386e-02, 5.788e-03, -6.296e-02, 6.637e-03, -5.344e-02, 4.003e-03, -3.187e-02, 3.361e-03) * s0_1_0;
	r0 += M4(2.972e-02, -3.855e-01, -2.697e-02, 1.255e-02, 2.592e-02, 1.233e-01, 1.577e-01, -3.252e-01, 1.123e-02, -1.421e-01, 1.703e-01, -1.626e-01, 1.617e-01, -2.016e-01, 6.324e-02, -1.685e-01) * s0_1_1;
	r0 += M4(1.356e-03, 2.223e-03, 1.307e-03, 8.681e-04, 1.705e-03, 5.362e-03, -2.963e-03, 3.743e-02, 2.671e-04, 6.418e-02, -2.019e-03, 5.930e-02, -1.147e-04, 4.851e-02, 1.347e-03, 5.163e-02) * s0_1_2;
	r0 += M4(-7.976e-03, -2.754e-04, -1.715e-03, -1.840e-03, 2.127e-03, 2.120e-03, 8.512e-03, 5.071e-03, 4.897e-03, 5.447e-05, 4.043e-03, 3.252e-03, -1.478e-02, -4.424e-03, -2.600e-02, -1.966e-03) * s0_2_0;
	r0 += M4(2.853e-03, 8.642e-03, -1.019e-02, -3.927e-02, -2.418e-03, -2.289e-03, -9.193e-03, 3.545e-02, -4.005e-03, 2.191e-03, -5.295e-02, -3.009e-02, 3.692e-03, 1.312e-02, 7.397e-02, -2.350e-02) * s0_2_1;
	r0 += M4(-5.747e-04, 1.770e-04, -7.919e-04, 2.597e-04, -1.610e-04, -1.289e-04, -1.108e-03, 1.630e-03, 6.976e-05, -1.435e-03, 1.783e-03, 1.588e-02, -6.427e-04, 2.153e-03, -8.306e-04, 1.739e-02) * s0_2_2;
	r0 += M4(-1.515e-02, -7.367e-03, 3.138e-03, 2.282e-03, 8.538e-03, 3.143e-05, 2.424e-07, -3.365e-07, -5.850e-03, -4.222e-04, -5.589e-04, 4.463e-04, 1.018e-01, 1.910e-04, 3.789e-03, -1.705e-03) * s1_0_0;
	r0 += M4(-8.676e-03, -1.509e-02, 7.063e-04, 2.460e-03, 2.374e-02, 2.397e-02, 3.300e-07, 3.866e-07, 4.382e-03, -1.811e-02, 3.090e-03, 4.864e-04, -1.519e-01, 1.023e-01, 5.376e-02, 8.081e-02) * s1_0_1;
	r0 += M4(-5.431e-03, -3.936e-03, 6.667e-04, 2.455e-04, -3.796e-07, 8.453e-03, -3.321e-07, -8.683e-08, 1.932e-02, 5.228e-02, 6.470e-03, 1.205e-02, 5.979e-03, -3.430e-02, -4.473e-03, -3.572e-02) * s1_0_2;
	r0 += M4(6.757e-02, 1.559e-02, -8.374e-02, 4.451e-03, 2.373e-02, 4.710e-06, 2.398e-02, 1.048e-06, -1.358e-02, -7.354e-05, -1.536e-02, -1.862e-03, -7.584e-03, 4.928e-03, 5.628e-02, 1.285e-02) * s1_1_0;
	r0 += M4(1.528e-01, 1.770e-01, -1.313e-01, -1.833e-01, 7.104e-02, 7.056e-02, 7.007e-02, 7.007e-02, -5.117e-02, -3.773e-02, -2.924e-02, -4.776e-02, 1.231e-02, -2.606e-02, -5.970e-02, -1.165e-01) * s1_1_1;
	r0 += M4(2.605e-03, 3.509e-02, -5.388e-03, -5.063e-02, 4.808e-06, 2.496e-02, 2.770e-07, 2.446e-02, 1.346e-02, -5.058e-03, 2.717e-02, 5.015e-02, -3.536e-04, 8.572e-03, 2.974e-03, 7.040e-03) * s1_1_2;
	r0 += M4(-4.296e-03, -1.854e-03, 1.251e-02, 8.728e-03, 2.601e-06, -5.078e-07, 8.627e-03, 1.104e-06, -9.041e-05, 2.619e-06, -4.743e-03, 1.080e-04, -2.819e-03, 9.393e-04, -8.271e-03, 5.033e-03) * s1_2_0;
	r0 += M4(-2.500e-03, -5.049e-03, 1.955e-02, 1.843e-02, -3.911e-07, 1.067e-06, 2.436e-02, 2.414e-02, -1.631e-03, 2.664e-04, -1.849e-02, -1.004e-02, 8.581e-04, -5.237e-04, 6.286e-03, 1.513e-03) * s1_2_1;
	r0 += M4(-1.730e-03, -1.952e-03, 4.735e-03, 7.586e-03, -2.431e-06, -5.488e-07, 1.593e-08, 8.575e-03, 6.725e-04, 1.117e-03, 1.041e-03, -9.866e-03, 2.333e-04, -9.887e-05, 1.189e-03, 2.995e-03) * s1_2_2;
	r0 += V4(-9.797e-11, -3.165e-09, 1.649e-11, -3.260e-12);
	r0 = r0;
	vec2 opt = 0.5 * LUMA_pt;
	vec2 fpos = (vec2(opos) + vec2(0.5)) * opt;
	imageStore(out_image, opos + ivec2(0, 0), vec4(r0.x + LUMA_tex(fpos + vec2(0.0, 0.0) * opt).r, 0.0, 0.0, 1.0));
	imageStore(out_image, opos + ivec2(1, 0), vec4(r0.y + LUMA_tex(fpos + vec2(1.0, 0.0) * opt).r, 0.0, 0.0, 1.0));
	imageStore(out_image, opos + ivec2(0, 1), vec4(r0.z + LUMA_tex(fpos + vec2(0.0, 1.0) * opt).r, 0.0, 0.0, 1.0));
	imageStore(out_image, opos + ivec2(1, 1), vec4(r0.w + LUMA_tex(fpos + vec2(1.0, 1.0) * opt).r, 0.0, 0.0, 1.0));
}
